首页 > 解决方案 > SQL:尝试选择日期前 7 天的记录

问题描述

我有一个带有名为 oppo_installdate 的日期字段的表。这是一个未来的日期,我基本上想选择这个日期距离当前日期不超过 7 天的记录。我曾尝试使用下面的查询来执行此操作,但它的返回日期也较早于 2019 年,我不确定为什么会发生这种情况。

select * from [CRM_Test].[dbo].[Opportunity]
where (GETDATE() >= DATEADD(day,-7, oppo_installdate))

有人可以提出更好的方法吗?

标签: sqlsql-server

解决方案


每当您使用时,WHERE总是尝试将任何函数应用于常量或其他函数,而不是您的列。DATEADD(day,-7, oppo_installdate)将使查询成为非 SARGable,并且可能会因为无法使用任何索引而减慢它的速度。

看起来你只是想要的是:

SELECT *
FROM [dbo].[Opportunity]
WHERE oppo_installdate >= DATEADD(DAY, 7, GETDATE());

请注意,GETDATE返回 a datetime,因此如果您想从 7 天前的午夜开始,您将使用CONVERT(date,GETDATE())(或CAST(GETDATE() AS date))。


推荐阅读