在SQL Server中的datediff函数中获取2个值之间的记录

时间:2014-08-19 05:32:15

标签: sql sql-server datediff

请你帮我解决这个问题。

我想仅在DATEDIFF(day, due_date, GETDATE()) 超过60但<90天(或在60天到90天之间)时获取记录。如果小于60天或大于90天,则将其遗漏。

谢谢!

2 个答案:

答案 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计算比较日期吗

See: Sargable

答案 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