1. ホーム
  2. sql

[解決済み】select文のDatetimeカラムをUTCからローカルタイムに変換する。

2022-04-05 01:57:42

質問

SQLのselectクエリをいくつか行っていますが、クエリ結果に現地時間として表示するために、UTC datetimeカラムを現地時間に変換したいと考えています。この変換はコードで行うのではなく、データベースに対して手動でランダムにSQLクエリを実行する際に行いたいと考えています。

どのように解決するのですか?

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

何をするにしても しない 使用 - なぜなら、この操作はアトミックではなく、 システムの日付とローカルの日付が異なる時間にチェックされる (つまり、アトミックではない) ことで、 レースコンディションによる不確定な結果が生じることがあるからです。

なお、この回答は夏時間を考慮していません。もし、夏時間の調整を入れたい場合は、以下のSOの質問もご覧ください。

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