これは、SQLServer2008以降では次のように実行できます。
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の質問も参照してください。
SQLServerで夏時間の開始関数と終了関数を作成する方法