首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Oracle SQL Sysdate没有与nls_date_format=‘DD-MON’进行适当比较

Oracle SQL Sysdate没有与nls_date_format=‘DD-MON’进行适当比较
EN

Stack Overflow用户
提问于 2021-02-08 10:00:42
回答 2查看 89关注 0票数 0

我有一个oracle sql代码,与手动输入的日期(上星期四或星期五)相比,使用sysdate时得到的结果不一致。

例如:

nls_date_format='DD-MON-RR';

  1. Alter会话集

使用以下where子句在MondaysManual条目上运行正确工作的自定义日期的

  1. 查询:

如果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与相同的值进行比较,那么导致结果不匹配的原因是什么呢?

EN

回答 2

Stack Overflow用户

发布于 2021-02-08 10:15:22

to_char(sysdate,'D')的结果取决于当前用户会话NLS_TERRITORY设置。

对于更可靠的解决方案,更好地使用,例如:

代码语言:javascript
复制
TO_CHAR(sysdate, 'fmDay', 'NLS_DATE_LANGUAGE = American') = 'Monday'
票数 1
EN

Stack Overflow用户

发布于 2021-02-08 10:07:13

SYSDATE - 3返回日期时间组件。

代码语言:javascript
复制
SQL> select sysdate - 3 from dual;

SYSDATE-3
-------------------
05.02.2021 11:06:04

SQL>

您的代码建议DATECOLUMN只包含日期组件。因此,试着

代码语言:javascript
复制
trunc(sysdate) - 3

它将“删除”时间组件(实际上,将值设置为前一个午夜):

代码语言:javascript
复制
SQL> select trunc(sysdate) - 3 from dual;

TRUNC(SYSDATE)-3
-------------------
05.02.2021 00:00:00

因此,您的代码将是

代码语言:javascript
复制
WHERE DATECOLUMN= case when to_char(sysdate,'D')=2 then trunc(sysdate) - 3 
                       else to_date('9999/01/01','yyyy/mm/dd') 
                  end
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66099404

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档