2

我正在尝试根据以下 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 运算符以正确的方式解决这个问题,还是应该执行不同类型的嵌套查询?

4

2 回答 2

3

用于truncsysdate

SELECT * FROM NEM_RM16
WHERE NEM_RM16.DAY IN (
  SELECT trunc(SYSDATE)-(level*7) as DateRange
  FROM DUAL
  CONNECT BY LEVEL <=10);
于 2012-05-24T08:43:13.450 回答
-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);

希望能帮助到你

于 2012-05-24T09:24:44.243 回答