串联 Select 列表值 returns 'not a valid month' 应用时 TO_DATE

Concatenated Select List value returns 'not a valid month' when applied TO_DATE

我有 select 列表中的月份和年份值,将它们连接成一个字符串。如果 TO_DATE 应用于字符串,则 returns 'not a valid month' 错误。 下面是我的代码片段,

V_DATE_FROM_STR_TEST := TRIM('01-'||TRIM(TO_CHAR(:P3_FROM_MONTH))||'-'||TRIM(TO_CHAR(:P3_YEAR)));

V_DATE_TO_STR_TEST := TRIM('01-'||TRIM(TO_CHAR(:P3_TO_MONTH))||'-'||TRIM(TO_CHAR(:P3_YEAR)));

此行出现错误'not a valid month'

TRUNC(TO_DATE(V_DATE_FROM_STR_TEST, 'DD-MON-YYYY'))

我尝试按 HTP.PRN(V_DATE_FROM_STR_TEST) 打印,显示日期 01-JAN-2020

添加 LOV

月LOV

select to_char(add_months(trunc(sysdate, 'yyyy'), level - 1), 'MONTH') d, 
to_char(add_months(trunc(sysdate, 'yyyy'), level - 1), 'MON') r
  from dual
connect by level <= 12

喜欢的年份

    select YEAR d, YEAR r
from   (select to_number(to_char(sysdate,'yyyy')) -8 YEAR
from dual
UNION
select to_number(to_char(sysdate,'yyyy')) -7 YEAR
from dual
UNION
select to_number(to_char(sysdate,'yyyy')) -6 YEAR
from dual
UNION
select to_number(to_char(sysdate,'yyyy')) -5 YEAR
from dual
UNION
select to_number(to_char(sysdate,'yyyy')) -4 YEAR
from dual
UNION
select to_number(to_char(sysdate,'yyyy')) -3 YEAR
from dual
UNION
select to_number(to_char(sysdate,'yyyy')) -2 YEAR
from dual
UNION
select to_number(to_char(sysdate,'yyyy')) -1 YEAR
from dual
UNION
select to_number(to_char(sysdate,'yyyy')) YEAR
from dual
) order by year desc

我猜 select 列表值的日期字符串中添加了一些不需要的字符,我该如何删除它?

如果您切换到数字,情况可能会有所改善。

Month LoV: 显示 words, 但 return numbers:

select to_char(add_months(trunc(sysdate, 'yyyy'), level - 1), 'MONTH') d, 
       level r
  from dual
connect by level <= 12;

然后将其用于生成的字符串:

to_date(lpad(:P3_FROM_MONTH, 2, '0') || :P3_YEAR, 'mmyyyy')

此外,所有这些 TRIM 看起来都是不必要的,但是没关系 - 我明白 - 你试图解决这个问题。

虽然没有直接引用,但您可以简化“Year LOV”查询。

select yr d, yr r
  from ( select extract(year from sysdate)-level +1 yr
           from dual 
          connect by level <= 9
       )
 order by yr desc;