在sql中获取从当前日期起最近90天的记录

Posted

技术标签:

【中文标题】在sql中获取从当前日期起最近90天的记录【英文标题】:fetch records of last 90 days from current date in sql 【发布时间】:2013-05-10 09:23:43 【问题描述】:

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

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

【问题讨论】:

【参考方案1】:
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

【讨论】:

如果您只想考虑完整天数,请考虑使用 trunc(sysdate)-90。【参考方案2】:
select *
from adhoc_request
where Crdate < DATEADD("d", -90, current_date()) < 90);

一些注意事项:

永远不要在 WHERE 子句中的谓词上使用函数。注意 CrDate 在我的代码中是单独的 DATEADD 将准确提取包括时间在内的 90 天。 DATEDIFF 计算午夜边界

【讨论】:

DATEADD 在 Oracle 中不可用 - SQL 标记 not 表示 SQL 服务器有问题。 对不起,如果我的评论冒犯了你 - 但是 DATEADD() 一个 SQL 服务器函数(而 CURRENT_DATE 显然是 mysql),所以我假设你的解决方案只是 SQL 服务器。 我确实认为 MySQL 但 MySQL 使用 DATE_ADD。我没有检查语法。我有时会混淆方言【参考方案3】:

请尝试以下oracle查询

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

【讨论】:

嗨,我尝试执行此查询时遇到以下错误【参考方案4】:
 Where trunc(Crdate) BETWEEN (trunc(sysdate)-INTERVAL '90' DAY) AND trunc(sysdate)

【讨论】:

以上是关于在sql中获取从当前日期起最近90天的记录的主要内容,如果未能解决你的问题,请参考以下文章

在 where 子句中从当前日期减去 30 天

如何在SQL查询中编写一个日期范围的代码,使其从当前日期向前追溯3周,并从当前日期向前追溯1周。

T-SQL 查询以获取从今天起 +30 天的日期

如何在 SQL Server 中选择最近 7 天的日期

如何返回从当前日期开始最近 7 天内添加到数据库的所有记录

mysql 如何获取数据表中离当前日期最近的数据