2012-02-06 43 views
0

在这种类型的代码,DATEDIFF GETDATE添加

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

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

我知道改变-6-7会拉记录从7天前,但变量是日期跨度的结束,所以我可以将其更改为-1

回答

1

这不是一个日期跨度。

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

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

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

+0

我越来越 – henryaaron 2012-02-06 23:40:51

+1

你在那里有一个额外的括号错误 – henryaaron 2012-02-06 23:44:07

0

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

你的代码更改为:

AND(BETWEEN DATEADD(天,-1,GETDATE())AND DATEADD(日,-7,GETDATE())Orders.ShipDate)

+0

我会在哪里把这个? – henryaaron 2012-02-06 23:41:32

+0

@ user1090389:以上是清洁器。 – NotMe 2012-02-06 23:46:32

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 
0

我喜欢的功能之间。这可能与您使用的SQL不同,但这是我使用的。

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