我知道如何以多种不同的格式选择当年第一个月的第一天。以下工作正常:'01-JAN-' || TO_CHAR(TO_DATE(SYSDATE),'YYYY')
。
但是,我需要在YTD PSoft查询的日期范围标准中使用当年的1月1日:
WHERE A.effdt BETWEEN (January 1, Current_Year) AND SYSDATE.
当我在条件中使用表达式'01-JAN-' || TO_CHAR(TO_DATE(SYSDATE),'YYYY')
时,出现以下错误:
A SQL error occurred. Please consult your system log for details.
Error in running query because of SQL Error, Code=1858, Message=ORA-01858:
a non-numeric character was found where a numeric was expected (50,380)`
答案 0 :(得分:1)
您应该从不将LITERAL
与DATE
进行比较。因为,Oracle将进行IMPLICIT
转换。而且,迟早会成为性能问题。
使用TO_DATE
将文字明确转换为日期。
例如,
取决于日期值输入法
<强> 1。如果您通过某个程序传递文字
BETWEEN TO_DATE('01-01-2014','DD-MM-YYYY') and SYSDATE
<强> 2。如果您已在表格中显示日期值,请使用TRUNC
BETWEEN TRUNC(SYSDATE, 'YYYY') and SYSDATE