2013-05-10 380 views

回答

1

请尝试以下查询甲骨文

SELECT 
    * 
FROM 
    adhoc_request 
WHERE 
    trunc(sysdate-Crdate)<90 
+0

...和的crdate Rob 2013-05-10 09:28:02

+0

喜文我尝试执行这个查询即时得到下面的错误 – Anas 2013-05-10 09:34:55

+0

错误在第3行: ORA-00907:缺少右括号 – Anas 2013-05-10 09:35:34

1
select * 
from adhoc_request 
where Crdate < DATEADD("d", -90, current_date()) < 90); 

一些注意事项:

  • 在WHERE子句中不要使用功能上的谓词。注意CrDate在我的代码中是独一无二的
  • DATEADD会精确提取90天,包括时间。 DATEDIFF计数午夜边界
+0

DATEADD在Oracle中不可用 - SQL标记不*表示SQL服务器的问题。 – 2013-05-10 12:01:11

+0

对不起,如果我的评论冒犯了你 - 但DATEADD()*是一个SQL服务器函数(而CURRENT_DATE显然是MySQL),所以我认为你的解决方案只是SQL服务器。 – 2013-05-10 12:53:47

+0

我确实认为MySQL但MySQL使用DATE_ADD。我没有检查语法。我在方言之间混淆有时 – gbn 2013-05-10 13:18:46

6
SELECT * 
FROM adhoc_request 
WHERE Crdate >= sysdate-90 

SYSDATE包括时间部分,例如“2013年4月13日9点45分51秒”

因此,实际上,查询上运行的“2013年4月13日9点45分51秒”转换为

WHERE Crdate >= "2013-01-13 09:45:51" 

大卫的建议,工作更具有可预见性而且在大多数情况下更正确,这首先截断SYSDATE服用90天关闭之前,只返回今天的日期,即

SELECT * 
FROM adhoc_request 
WHERE Crdate >= TRUNC(sysdate)-90 
+0

这个查询正在工作...... thanks很多.. – Anas 2013-05-10 09:52:16

+1

并且考虑使用trunc(sysdate)-90如果你只想考虑完整的日子。 – 2013-05-10 10:01:27

+0

谢谢@David,突出点! – RichardTheKiwi 2013-05-10 10:11:05

0
Where trunc(Crdate) BETWEEN (trunc(sysdate)-INTERVAL '90' DAY) AND trunc(sysdate)