sql >> Database >  >> RDS >> Sqlserver

Converteer Datetime-kolom van UTC naar lokale tijd in select-statement

U kunt dit als volgt doen op SQL Server 2008 of hoger:

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

Je kunt ook het minder uitgebreide doen:

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

Wat je ook doet, niet doen gebruik - om datums af te trekken, omdat de bewerking niet atomair is, en u af en toe onbepaalde resultaten krijgt vanwege raceomstandigheden tussen de systeemdatum/tijd en de lokale datum/tijd die op verschillende tijdstippen wordt gecontroleerd (d.w.z. niet-atomisch).

Houd er rekening mee dat dit antwoord geen rekening houdt met de zomertijd. Als u een zomertijdaanpassing wilt opnemen, raadpleeg dan ook de volgende SO-vraag:

Hoe u de begin- en eindfunctie voor zomertijd kunt maken in SQL Server



  1. SELECT of INSERT een rij in één commando

  2. Queryresultaten retourneren als een door komma's gescheiden lijst in MySQL

  3. In PostgreSQL, hoe gegevens in te voegen met de opdracht COPY?

  4. SQL-injectie in Node.js voorkomen