简体   繁体   English

应用 TO_DATE 时,连接的选择列表值返回“无效月份”

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

I have month and year values from select list, concatenated them in a string.我有来自选择列表的月份和年份值,将它们连接在一个字符串中。 If TO_DATE is applied on the string, that returns 'not a valid month' error.如果 TO_DATE 应用于字符串,则返回“无效月份”错误。 Below is my code snippet,下面是我的代码片段,

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)));

Error 'not a valid month' occurs on this line,此行出现'not a valid month'错误,

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

I have tried printing by HTP.PRN(V_DATE_FROM_STR_TEST) that shows date 01-JAN-2020 .我尝试通过显示日期01-JAN-2020HTP.PRN(V_DATE_FROM_STR_TEST)打印。

Adding LOVs添加 LOV

Month 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

Year LOV年LOV

    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

I am guessing there are some unwanted character is added in the date string from select list value, how can I remove that?我猜在选择列表值的日期字符串中添加了一些不需要的字符,我该如何删除它?

If you switch to digits, things might improve.如果您切换到数字,情况可能会有所改善。

Month LoV: display words , but return numbers : Month LoV:显示words ,但返回numbers

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

Then use this for the resulting string:然后将其用于结果字符串:

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

Also, all those TRIM s look unnecessary, but OK - I understand - you tried to fix the problem.此外,所有这些TRIM看起来都没有必要,但是好吧 - 我理解 - 你试图解决这个问题。

While not directly referenced you can simplify your "Year LOV" query.虽然没有直接引用,但您可以简化“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;

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM