2009-11-13 183 views
2

有人可以向我解釋這一點,因爲我對這種情況的原因感到困惑嗎?基本上我想知道的是,爲什麼星期日和本週的每隔一天之間有差別,從第0年開始幾周。如果這是有道理的!DateDiff SQL Server問題

我試着設置日期,但沒有效果。毫無疑問,本週的週一至週日應該與零年的週數相同?

Set Datefirst 1 
Select DateName(dw,0) --Monday 
Select DateDiff(week, 0, '20091109')--Monday: Difference 5732 
Select DateDiff(week, 0, '20091114')--Saturday: Difference 5732 
Select DateDiff(week, 0, '20091115')--Sunday: Difference 5733 

是什麼使這更離奇的是,如果你把兩個相同的日期,日期差異他們,你得到一個星期爲其他的人; 6天。我在這裏錯過了什麼嗎?

Select DateDiff(dd,'20091109','20091115')--6 Days difference 
Select DateDiff(ww,'20091109','20091115')--1 Week difference 

我使用SQL Server 2005

回答

3

週日被認爲是本週的一些國家的第一天。

+0

我認爲你在做些什麼......選擇DateDiff(wk,'20091108','20091114')返回0. – Mayo

+0

這就是原因。在大多數設置中,SQL Server認爲日曆星期是星期日到星期六。 – BBlake

+2

作爲附錄,您可以使用SET DATEFIRST命令設置SQL Server認爲是星期幾的第一天。接着是1(星期一)至7(星期日)。在默認安裝中,這是一個7(星期日) – BBlake

2

我認爲你面臨的問題是邊界日期。它們是否包容?

Select DateDiff(dd,'20091109','20091115')--6 Days difference 
Select DateDiff(dd,'20091109','20091116')--7 Days difference 

則DateDiff - 返回兩個指定日期之間交叉的日期和時間邊界數。 (聯機叢書定義)

3

所有DATEDIFF功能做的是數日boundarys傳遞給它的兩個日期時間參數之間的數量。因此,如果一週定義爲星期天開始,那麼本週界限是星期天早上的午夜。

所以,從11:59週六晚上00:01上午星期天早晨,將是相同datediff(week, x, y)從00:01至週日11:59 PM週六夜 - 12天后。

x ------------------------------x ==> 1 week diff 
| Su M T W T F S | Su M T W T F S | 
|    |    | 
       x-x     ==> Also 1 week diff 
1

如果設置DATEFIRST = 1,星期一是一週的第一天,與上週計算將在本週使用MOD 7天數和/ 7週數,其中週日會用作1,其他FLOOR用0表示。