我有一个oracle sql代码,与手动输入的日期(上星期四或星期五)相比,使用sysdate时得到的结果不一致。
例如:
nls_date_format='DD-MON-RR';
使用以下where子句在MondaysManual条目上运行正确工作的自定义日期的
如果DATECOLUMN= to_date('2021/01/29','yyyy/mm/dd') -在上周五的日期中键入DATECOLUMN= case to_char(sysdate,'D')=2,sysdate-3 to_char to_date(‘9999/01/01,'yyyy/mm/dd')结束--如果今天是星期一,那么选择上星期五的日期,然后选择一个假约会。
我确信python中的alter脚本工作正常,因为我也在Alteryx中进行了测试。然而,我仍然有困难的结果,以匹配手动输入的日期。我测试了sysdate-3对DATECOLUMN使用select的比较,它似乎正在研究蟾蜍,所以我没有看到造成不匹配的问题。
如果两段代码都应该将DATECOLUMN与相同的值进行比较,那么导致结果不匹配的原因是什么呢?
发布于 2021-02-08 10:15:22
to_char(sysdate,'D')的结果取决于当前用户会话NLS_TERRITORY设置。
对于更可靠的解决方案,更好地使用,例如:
TO_CHAR(sysdate, 'fmDay', 'NLS_DATE_LANGUAGE = American') = 'Monday'发布于 2021-02-08 10:07:13
SYSDATE - 3返回日期和时间组件。
SQL> select sysdate - 3 from dual;
SYSDATE-3
-------------------
05.02.2021 11:06:04
SQL>您的代码建议DATECOLUMN只包含日期组件。因此,试着
trunc(sysdate) - 3它将“删除”时间组件(实际上,将值设置为前一个午夜):
SQL> select trunc(sysdate) - 3 from dual;
TRUNC(SYSDATE)-3
-------------------
05.02.2021 00:00:00因此,您的代码将是
WHERE DATECOLUMN= case when to_char(sysdate,'D')=2 then trunc(sysdate) - 3
else to_date('9999/01/01','yyyy/mm/dd')
endhttps://stackoverflow.com/questions/66099404
复制相似问题