Auf SQL Server 2008 oder höher können Sie dies wie folgt tun:
SELECT CONVERT(datetime,
SWITCHOFFSET(CONVERT(datetimeoffset,
MyTable.UtcColumn),
DATENAME(TzOffset, SYSDATETIMEOFFSET())))
AS ColumnInLocalTime
FROM MyTable
Sie können auch weniger ausführlich sein:
SELECT DATEADD(mi, DATEDIFF(mi, GETUTCDATE(), GETDATE()), MyTable.UtcColumn)
AS ColumnInLocalTime
FROM MyTable
Was auch immer Sie tun, tun Sie es nicht Verwenden Sie -
Datumsangaben zu subtrahieren, da die Operation nicht atomar ist und Sie gelegentlich unbestimmte Ergebnisse aufgrund von Wettlaufbedingungen zwischen der Datumszeit des Systems und der lokalen Datumszeit erhalten, die zu unterschiedlichen Zeiten (d. h. nicht atomar) überprüft werden.
Bitte beachten Sie, dass diese Antwort die Sommerzeit nicht berücksichtigt. Wenn Sie eine DST-Anpassung hinzufügen möchten, lesen Sie bitte auch die folgende SO-Frage:
So erstellen Sie die Start- und Endfunktion für die Sommerzeit in SQL Server