2014-09-26 405 views
0

程序員應該在使用diffdate函數時使用一天還是一週?在我看來,他們的工作原理基本相同。人們可以簡單地使用更適合他們需求的那一種。但是,從這個查詢中,即使日期非常相似,DIFFDATE似乎也得到了不同的結果。 (特別是第3行和第8行)我不明白爲什麼第3行會得到8天,但只有一週,第8行也會得到8行,但只有1周。SQL:在DIFFDATE函數中使用Day或Week?

SELECT OrderDate, ShipDate, DateDiff(week, OrderDate, ShipDate)as week, DateDiff(day, OrderDate,  ShipDate) as day 
FROM Sales.SalesOrderHeader 
Where DateDiff(day, OrderDate, ShipDate) > 7 

enter image description here

回答

3

SQL Server的datediff()函數可能不會做你認爲它的作用。

它計算兩個日期時間之間傳遞的邊界數。因此,2014年1月1日23時59分和2014年1月2日00時01分之間的datediff(day)爲1天。對於2014-01-01 00:01和2014-01-01 23:59,datediff(day)爲0天。

這同樣適用於幾周。

這是您正在看到的行爲。這是有據可查的here

+0

感謝您回覆我的帖子@GordonLinoff。你的解釋使幫助,我通過鏈接閱讀。也許你可以澄清爲什麼在第3行和第8行會有不同的星期編號 - 因爲OrderDate的天數都是31,他們的ShipDates是第8天。 SQL周是從星期天開始的嗎?或者它是一組7天,並且無關緊要一週中的哪一天? – user3281388 2014-09-26 01:21:28

+0

@ user3281388。 。 。數週開始取決於'DATEFIRST'(請參閱http://msdn.microsoft.com/zh-cn/library/ms174420.aspx)。默認情況是星期一開始。 – 2014-09-26 01:40:59

+0

太好了 - 非常感謝@GordonLinoff的幫助和澄清。我很感激! – user3281388 2014-09-26 01:41:58

2

好了,週一,1日至週二,9日是一週(你搬進接下來的一週),但週日,7日週一,15日兩個星期(你整整一個星期跳過,並且我的星期從星期一開始)。

這就像從22:00到23:00移動一小時是0天的差異,但從23:45移動到0:45是1天的差異。或者從12月30日到12月31日,12月31日到1月1日,或者(多年)

+0

謝謝@Thilo的回覆。 SQL是否遵循正常的日曆周?或者它是一組7天,它開始的哪一天並不重要? – user3281388 2014-09-26 01:25:54

相關問題