2017-06-01 129 views
0

我需要將存儲爲UTC的日期時間轉換爲存儲在另一列中的特定時區。將UTC中的SQL Server日期時間轉換爲特定的時區

例如,假設此表:

 
Date    | TimeZone 
-----------------+--------------- 
2017-05-15 11:17 | Europe/Madrid 
2017-01-01 11:17 | Europe/Madrid 
2017-05-15 11:17 | US/Pacific 
2017-01-01 11:17 | US/Pacific 

我應該得到這樣的結果:

 
Date 
---------------- 
2017-05-15 13:17 
2017-01-01 12:17 
2017-05-15 04:17 
2017-01-01 03:17 

請注意,我使用的是SQL Server 2012中,所以我不能使用AT TIME ZONE。有沒有辦法實現這一點,而無需後處理數據?

+4

可能重複[如何在SQL Server 2012的SQLCLR程序集中使用TimeZoneInfo](https://stackoverflow.com/questions/17581510/how-does-one -use-的TimeZoneInfo-IN-A-SQLCLR組裝式-SQL服務器-2012)。答案包含一個鏈接,指向將向SQL Server 2008 R2 +添加TZ支持的項目。 –

+1

[使用SQL 2012 Server將UTC時間轉換爲基準本地時間]的可能重複(https://stackoverflow.com/questions/12452430/use-sql-2012-server-to-convert-utc-time-to-base -當地時間) –

回答

1

不幸的是,這並不容易。您需要關於不同時區和日光節約開關規則等信息。 我使用sqltz庫來滿足我所有與時區有關的需求。

SELECT LocalDate = Tzdb.UtcToLocal(UTCDate, TimeZone, 1, 1) 
    FROM Table 

sqltz使用IANA時區數據庫,Microsoft使用不同的標準,以便時區的名稱是不同的。歐洲/馬德里和美國/太平洋地區在IANA數據庫

相關問題