PLSQL'IN'运算符

时间:2012-05-24 08:35:53

标签: sql oracle plsql

我正在尝试根据以下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运算符以正确的方式进行此操作,还是应该使用不同类型的嵌套查询?

2 个答案:

答案 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);

希望有所帮助