我正在尝试根据以下PLSQL查询确定的“日期”范围来选择行,该查询目前提供我需要的结果 - 作为一周中最后10周的“日期”对象脚本运行时。例如。 5月22日运行它将于5月15日,5月8日结束,等等。
SELECT SYSDATE-(level*7) as DateRange
FROM DUAL
CONNECT BY LEVEL <=10
这会生成一个日期列表。然后我尝试将它与父选择语句结合起来,以获得上面输出的日期在'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运算符以正确的方式进行此操作,还是应该使用不同类型的嵌套查询?
答案 0 :(得分:3)
使用trunc
来截断sysdate
SELECT * FROM NEM_RM16
WHERE NEM_RM16.DAY IN (
SELECT trunc(SYSDATE)-(level*7) as DateRange
FROM DUAL
CONNECT BY LEVEL <=10);
答案 1 :(得分:-1)
嵌套查询返回的日期格式可能与列NEM_RM16.DAY的日期格式不匹配 也许,如果在制作相同格式后比较日期,它们将正确匹配
喜欢这个
SELECT *
FROM NEM_RM16
WHERE TO_DATE(TO_CHAR(NEM_RM16.DAY, 'DD/MM/YYYY'), 'DD/MM/YYYY') IN
(SELECT TO_DATE(TO_CHAR(SYSDATE - (level * 7), 'DD/MM/YYYY'),
'DD/MM/YYYY') as DateRange
FROM DUAL
CONNECT BY LEVEL <= 10);
希望有所帮助