私はいくつかの 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 の質問も参照してください。