2015-04-17 44 views
0

我讀datediff rounding有關MS SQL Server和迅速做出例如:使用DATEDIFF(MINUTE,GETUTCDATE(),GETDATE())獲取本地SQL Server時區偏移量是否安全?

select datediff(hour,'2015-04-15 19:59:59','2015-04-15 22:00:00') 
go 

3 
(1 row affected) 

select datediff(minute,'2015-04-15 19:59:59','2015-04-15 22:00:00') 
go 

121 
(1 row affected) 

select datediff(second,'2015-04-15 19:59:59','2015-04-15 22:00:00') 
go 

7201 
(1 row affected) 

有很多建議(在博客/ SO)通過調整時間本地:

DATEADD(MINUTE, DATEDIFF(MINUTE, GETUTCDATE(), GETDATE()), DATETIME_COLUMN) 

似乎它是危險和結果取決於執行查詢的時間。

還是有保證GETUTCDATE()GETDATE()指向相同的時間戳,如果他們在相同的查詢?

+0

您的datediff問題與rounding - datediff無關,只是衡量已經通過的間隔數。 19:59甚至19:01之間的差異以及22:00或甚至22:59的較晚時間將導致幾小時的相同結果,因爲在這兩種情況下,時鐘的小時已經改變了3次。你有關轉換爲UTC的問題是合法的,但它不涉及四捨五入,也不涉及與datediff這種行爲(這不是一個錯誤,不應該被視爲這樣)。 –

+0

所以我建議重點關注主要問題並刪除問題的前半部分。 –

回答

1

他們不敢保證給你同一時間,但是他們應該在幾秒之內給你時間。所以它導致你的問題(顯示1分鐘的差異)的機率不是很高。