4

您好我正在使用以下查询来检索从当前日期起最近 90 天的记录,但它不起作用。请帮我。

SELECT * 
FROM adhoc_request 
WHERE DATEDIFF(("d", Crdate, current_date()) < 90);
4

4 回答 4

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

SYSDATE包括时间部分,例如“04-13-2013 09:45:51”

所以实际上,在“04-13-2013 09:45:51”上运行的查询转换为

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

David 的建议更可预测,并且在大多数情况下更正确,它首先截断 SYSDATE 以返回今天的日期,然后再休息 90 天,即

SELECT * 
FROM adhoc_request 
WHERE Crdate >= TRUNC(sysdate)-90
于 2013-05-10T09:39:36.367 回答
1

请尝试以下有关 oracle 的查询

SELECT 
    * 
FROM 
    adhoc_request 
WHERE 
    trunc(sysdate-Crdate)<90
于 2013-05-10T09:25:46.230 回答
1
select *
from adhoc_request
where Crdate < DATEADD("d", -90, current_date()) < 90);

一些注意事项:

  • 永远不要在 WHERE 子句中的谓词上使用函数。注意 CrDate 在我的代码中是单独的
  • DATEADD 将准确提取包括时间在内的 90 天。DATEDIFF 计算午夜边界
于 2013-05-10T09:26:21.347 回答
0
 Where trunc(Crdate) BETWEEN (trunc(sysdate)-INTERVAL '90' DAY) AND trunc(sysdate)
于 2013-05-10T12:58:49.193 回答