Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Konvertieren Sie die Datetime-Spalte in der Select-Anweisung von UTC in Ortszeit

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