[英]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-2020
的HTP.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.