2011-06-23 48 views
2

我在我的數據庫中的幾個表中有一些列都在本地化服務器的DateTime值中。我想將這些全部轉換爲UTC日期時間值(不需要是DateTime2,因爲它將假定新值將以UTC表示)。Sql Server 2008-將本地化的DateTime列轉換爲UTC

我想在單個SQL語句中執行此操作。我不完全確定如何執行此操作,因爲我不花費大量時間在數據庫中。

假設可以做我的表名是TestTable和我的本地化的DateTime列被稱爲TestDateTime。

我想讓腳本對錶格進行更新以及轉換。

任何方式可能做到這一點?

回答

4

您可以從getdate()。減去getutcdate()找到差異:

select DateAdd(s,DateDiff(s, getdate(),getutcdate()), LocalizedDateColumn) 

這裏假設你是在同一個夏季/冬季狀態,你想轉換的時間。不理想,但我知道你可以在純SQL中完成的最佳轉換。

C#客戶具有更強的轉換:

yourDateTime.ToUniversalTime() 

不同於SQL版本,.NET版本在暑假期間將正確轉換冬季日期。

+1

我不是超級關心DST的準確性,我知道我已經抵消了。我認爲我可以做這樣的事情:'選擇DATEADD(小時,5,(從TestTable選擇TestDateTime))' – Brandon

+0

@Brandon:是的,這會增加5個小時,就像你期望的那樣:) – Andomar

+1

最後的SQL是這個:'更新TestTable設置TestDateTime = DATEADD(小時,5,TestDateTime)'。完美工作。 – Brandon