SELECT文で日時列をUTCから現地時間に変換する 質問する

SELECT文で日時列をUTCから現地時間に変換する 質問する

私はいくつかの SQL 選択クエリを実行しており、UTC の日時列をローカル時間に変換して、クエリ結果にローカル時間として表示したいと考えています。注意: この変換はコード経由で実行するのではなく、データベースに対して手動でランダムな SQL クエリを実行するときに実行します。

ベストアンサー1

SQL Server 2008 以降では、次のようにしてこれを実行できます。

SELECT CONVERT(datetime, 
               SWITCHOFFSET(CONVERT(datetimeoffset, 
                                    MyTable.UtcColumn), 
                            DATENAME(TzOffset, SYSDATETIMEOFFSET()))) 
       AS ColumnInLocalTime
FROM MyTable

より簡潔な方法も実行できます:

SELECT DATEADD(mi, DATEDIFF(mi, GETUTCDATE(), GETDATE()), MyTable.UtcColumn) 
       AS ColumnInLocalTime
FROM MyTable

何をするにしても、日付を減算するために を使用しないでください-。この操作はアトミックではなく、システムの日付と異なる時間にチェックされるローカルの日付との間の競合状態により、不確定な結果が返される場合があります (つまり、非アトミック)。

この回答では DST は考慮されていないことに注意してください。DST 調整を含める場合は、次の SO の質問も参照してください。

SQL Server で夏時間の開始と終了の関数を作成する方法

おすすめ記事