我正在尝试根据以下 PLSQL 查询确定的“日期”范围来选择行,该查询当前提供了我需要的结果 - 作为一周中的最后 10 周的“日期”对象当脚本运行时。例如。在 5 月 22 日运行它会产生 5 月 15 日、5 月 8 日等。
SELECT SYSDATE-(level*7) as DateRange
FROM DUAL
CONNECT BY LEVEL <=10
这会生成一个日期列表。然后,我尝试将其与父 select 语句结合起来,以获取包含上述输出的日期的行,该日期位于“DAY”(Oracle 类型 DATE)列中。
SELECT * FROM NEM_RM16
WHERE NEM_RM16.DAY IN (
SELECT SYSDATE-(level*7) as DateRange
FROM DUAL
CONNECT BY LEVEL <=10);
尽管知道有些行具有上述生成的日期,但它没有给出任何结果。
我读到,使用“IN”运算符时,值必须用单引号括起来,但我不确定如何使用上面的查询来执行此操作。
我是否可以使用 IN 运算符以正确的方式处理此问题,或者我应该执行不同类型的嵌套查询?
最佳答案
使用trunc
从sysdate
截断时间组件
SELECT * FROM NEM_RM16
WHERE NEM_RM16.DAY IN (
SELECT trunc(SYSDATE)-(level*7) as DateRange
FROM DUAL
CONNECT BY LEVEL <=10);
关于sql - PLSQL 'IN' 运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10733892/