2015-09-12 95 views
0

我正在尝试编写一个查询来检查两个日期或更多同时检查其中一个是否超出给定范围。日期验证以检查给定的日期是否在范围内

SELECT 
    sysdate 
FROM dual 
GROUP BY sysdate 
HAVING COUNT(CASE WHEN (SELECT sysdate, (sysdate+1) FROM dual) BETWEEN 
SYSDATE - 10 AND SYSDATE+10 THEN 1 ELSE NULL END) > 0 

我发现了一个异常

ORA-00913:值过多

用时2个日期尝试。 请告知

+1

您的查询不包含两个日期。我建议你展示你的实际查询。 –

回答

1

不完全确定为什么你想这样的查询。但是,如错误所示,when接受一个条件,因此您必须使用and来分隔查询。也不需要else null部分,因为它是默认值。

SELECT sysdate FROM dual 
GROUP BY sysdate 
HAVING COUNT(
      CASE WHEN (select sysdate from dual) BETWEEN SYSDATE - 10 AND SYSDATE+10 
      AND (select sysdate+1 from dual) BETWEEN SYSDATE - 10 AND SYSDATE+10 
      THEN 1 END 
      ) > 0 
0

问题是什么VKP建议情况下,当()期望一个值与另一种进行比较,但SYSDATE,SYSDATE + 1返回2个值不能一起比较。所以最好将这两个条件分开,但是我会在下面的where子句中做到这一点

 SELECT 
      sysdate 
     FROM dual 
     GROUP BY sysdate 
     HAVING (select count(*) from dual 
     WHERE 
      (SELECT sysdate FROM dual) BETWEEN 
      SYSDATE - 10 AND SYSDATE+10 
     AND 
      (SELECT sysdate+1 FROM dual) BETWEEN 
      SYSDATE - 10 AND SYSDATE+10) > 0 
相关问题