sql - Oracle SQL Sysdate 无法与 nls_date_format='DD-MON-RR' 正确比较
问题描述
与手动输入的日期(上周四或周五)相比,我有一个 oracle sql 代码在使用 sysdate 时得到不一致的结果。
前任:
更改会话集 nls_date_format='DD-MON-RR';
使用以下在星期一运行自定义日期的 where 子句进行查询:
正常工作的手动输入:
WHERE DATECOLUMN= to_date('2021/01/29','yyyy/mm/dd') -- key in previous Friday's date WHERE DATECOLUMN= case when to_char(sysdate,'D')=2 then sysdate-3 else to_date('9999/01/01','yyyy/mm/dd') end -- if today is monday, then pick last Friday's date for the run else pick a dummy date.
我确信 python 中的 alter session 脚本工作正常,因为我也在 Alteryx 中进行了测试。但是,我仍然无法让结果与手动输入的日期相匹配。我使用 select 测试了 sysdate-3 与 DATECOLUMN 的比较,它似乎在 TOAD 上工作,所以我没有看到导致不匹配的问题。
当两段代码都应该将 DATECOLUMN 与相同的值进行比较时,导致结果不匹配的原因是什么?
解决方案
结果to_char(sysdate,'D')
取决于当前用户会话NLS_TERRITORY
设置。
对于更可靠的解决方案,更好地使用例如:
TO_CHAR(sysdate, 'fmDay', 'NLS_DATE_LANGUAGE = American') = 'Monday'
推荐阅读
- string-concatenation - PHP:从 MySQL 中提取逗号分隔值
- angular - 可观察的返回类型问题
- python - 如何通过命令行传递 url 作为参数来运行 selenium python 测试用例
- firebase - 使用 Firebase 消息从多个服务器发送推送通知
- javascript - 使用 highcharts svg 生成的破碎图像
- r - 我正在尝试对 R 中的所有列进行卡方测试
- c# - 获取和保存变量的当前值而不是指针
- jmeter - 响应代码:Jmeter 4.0 中的 400 错误请求错误。需要帮助来修复此错误
- ios - NSData getBytes(长度)
- apache-spark - 在 Hive 表 hdfs 文件夹中写入文件并使其可用于从 Hive 查询