请你帮我解决这个问题。
我想仅在DATEDIFF(day, due_date, GETDATE())
超过60但<90天(或在60天到90天之间)时获取记录。如果小于60天或大于90天,则将其遗漏。
谢谢!
答案 0 :(得分:2)
sargable alternative =&gt;&gt;它不使用数据上的函数
-- DECLARE @today datetime = CAST(GETDATE() AS date) -- an option
DECLARE @today datetime = DATEADD(DAY, DATEDIFF(DAY,0, GETDATE()), 0)
SELECT
due_date
FROM some_table
WHERE (
due_date >= DATEDIFF(DAY, -90, @today)
AND due_date < DATEDIFF(DAY, -60, @today)
)
GETDATE()返回日期和当前时间,所以今天要#34;&#34;在00:00:00你需要将getdate强制转换为日期,或使用如上所示的dateadd函数。
然后,不是计算每行数据的不同天数(每行2个函数)并对该计算列进行过滤(这可能需要数百,数千或数百万的计算),为什么不将现有数据与2计算比较日期吗
答案 1 :(得分:1)
试试这个:
declare @today smalldatetime = getdate()
select
due_date
from
some_table
where
datediff(day, due_date, @today) > 60 and
datediff(day, due_date, @today) < 90