在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天的记录的主要内容,如果未能解决你的问题,请参考以下文章