在我的SQL查询中,
TO_DATE('2019-07-22' , 'YYYY-MM-DD')我想传递sysdate-1,而不是硬编码日期值。
我试过这个,
select TO_CHAR(to_date(
sysdate-1,'DD-Mon-YY'),'YYYY-MM-DD')dates from dual并在SQL查询中替换了相同的内容,但正在获取以下错误,
ORA- 01861 :文字不匹配格式字符串01861。00000 -“文字不匹配格式字符串”*原因:输入中的文字必须与格式字符串中的文字长度相同(除前导空格外)。如果"FX“修饰符已经打开,则文字必须完全匹配,没有额外的空格。*操作:更正格式字符串以匹配文字。
发布于 2019-08-02 06:10:25
Sysdate是一个返回DATE数据类型的函数;您不TO_DATE它。因此:
SQL> select to_char(sysdate - 1, 'yyyy-mm-dd') result from dual;
RESULT
----------
2019-08-01
SQL>如果您打算使用日期数据类型,那么--如注释所示--不需要任何TO_something函数:
SQL> select sysdate as today,
2 sysdate - 1 as yesterday
3 from dual;
TODAY YESTERDA
-------- --------
02.08.19 01.08.19
SQL>这种减法的结果是date数据类型。它呈现给您的方式取决于NLS设置;在我的数据库中,它被设置为dd.mm.yy。为了以不同的方式呈现它,您要么修改设置,要么使用适当的格式掩码应用to_char。
SQL> alter session set nls_date_format = 'yyyy-mm-dd';
Session altered.
SQL> select sysdate as today,
2 sysdate - 1 as yesterday
3 from dual;
TODAY YESTERDAY
---------- ----------
2019-08-02 2019-08-01
SQL>发布于 2019-08-02 11:30:34
虽然sysdate是date数据类型,但Oracle仍然存储时间组件。
您的代码(尝试)删除时间组件。为此,请使用trunc()
select trunc(sydate - 1)或
select trunc(sysdate - interval '1' day)请注意,当您选择数据并查看它时,时间组件通常会显示出来。
https://stackoverflow.com/questions/57320708
复制相似问题