Datediff GETDATE添加

时间:2012-02-06 23:24:50

标签: sql sql-server-2005 datediff dateadd

在这种类型的代码中,

AND Orders.ShipDate >= DATEADD(Day, Datediff(Day,0, GetDate() -6), 0)

它应该用6天前的日期记录,直到今天。我怎样才能让它从7天前拉到昨天?

我知道将-6更改为-7会从7天前提取记录,但哪个变量是日期范围的结尾,因此我可以将其更改为-1

4 个答案:

答案 0 :(得分:1)

这不是日期范围。

你所拥有的条件实际上只有一个条件:大于。大于6天前的右侧,因此您的条件与六天前的任何日期相匹配。换句话说,它不会停留在今天;它包括明天,下周和明年。

AND ( Orders.ShipDate >= DATEADD(Day, Datediff(Day,0, GetDate() -7), 0)
      AND Orders.ShipDate < DATEADD(Day, Datediff(Day,0, GetDate()), 0) )

这就是你真正想要的。它匹配的日期晚于7天前的午夜,以及今天午夜之前的日期(这是昨天的任何时间)。

答案 1 :(得分:0)

“查询日期范围的结尾”不在您的查询中。

将您的代码更改为:

AND(Orders.ShipDate在DATEADD之间(Day,-1,GetDate())和DATEADD(Day,-7,GetDate()))

答案 2 :(得分:0)

这也应该有效,它消除了0天的不必要的添加:

select *,DATEDIFF(Day, orders.ShipDate, GETDATE()) AS DAYS_SINCE_TODAY
from Orders 
where DATEDIFF(Day, orders.ShipDate, GETDATE()) >= 1 AND --This many days since today
      DATEDIFF(Day, orders.ShipDate, GETDATE()) <= 7     --Going back this many days

答案 3 :(得分:0)

我喜欢BETWEEN功能。这可能与您使用的SQL风格不同,但这就是我使用的。

BETWEEN dateadd(second, 0, dateadd(dd,datediff(dd,7,getdate()),0)) AND dateadd(second,-1, dateadd(dd,datediff(dd,0,getdate()),0))