2017-06-01 16 views
0

UTCとして保存されたdatetimeを別の列に格納されている特定のタイムゾーンに変換する必要があります。SQLサーバーのdatetimeをUTCで特定のタイムゾーンに変換する

は、例えば、このテーブルがあるとします。

 
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-assembly-in-sql-server-2012)を参照してください。回答には、SQL Server 2008 R2 +にTZサポートを追加するプロジェクトへのリンクが含まれています。 –

+1

[SQL 2012サーバーを使用して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データベースにあります

関連する問題