2012-02-06 77 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))