sql >> Databasteknik >  >> RDS >> Sqlserver

Konvertera kolumnen Datetime från UTC till lokal tid i select-satsen

Du kan göra detta på följande sätt på SQL Server 2008 eller senare:

SELECT CONVERT(datetime, 
               SWITCHOFFSET(CONVERT(datetimeoffset, 
                                    MyTable.UtcColumn), 
                            DATENAME(TzOffset, SYSDATETIMEOFFSET()))) 
       AS ColumnInLocalTime
FROM MyTable

Du kan också göra det mindre utförliga:

SELECT DATEADD(mi, DATEDIFF(mi, GETUTCDATE(), GETDATE()), MyTable.UtcColumn) 
       AS ColumnInLocalTime
FROM MyTable

Vad du än gör, gör inte använd - att subtrahera datum, eftersom operationen inte är atomär, och du kommer ibland att få obestämda resultat på grund av att tävlingsförhållanden mellan systemets datumtid och lokal datumtid kontrolleras vid olika tidpunkter (d.v.s. icke-atomärt).

Observera att detta svar inte tar hänsyn till sommartid. Om du vill inkludera en sommarjustering, se även följande SO-fråga:

Hur man skapar sommartid start- och slutfunktion i SQL Server



  1. Gruppera flera valda uttalanden när du anropar Oracle från ADO.NET

  2. cd:-M:ogiltigt alternativ

  3. SQL Server ersätt, ta bort alla efter ett visst tecken

  4. Hur tar man bort tidsdelen av ett datetime-värde (SQL-server)?