sql >> Database teknologi >  >> RDS >> Sqlserver

Konverter Datetime-kolonnen fra UTC til lokal tid i select statement

Du kan gøre dette på følgende måde på SQL Server 2008 eller nyere:

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

Du kan også gøre det mindre udførlige:

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

Uanset hvad du gør, ikke brug - at trække datoer fra, fordi operationen ikke er atomart, og du vil til tider få ubestemte resultater på grund af raceforhold mellem systemets datetime og det lokale datetime, der kontrolleres på forskellige tidspunkter (dvs. ikke-atomisk).

Bemærk venligst, at dette svar ikke tager højde for sommertid. Hvis du vil inkludere en sommertid-justering, se venligst også følgende SO-spørgsmål:

Sådan opretter du sommertid start- og slutfunktion i SQL Server



  1. lokale samlingstyper er ikke tilladt i SQL-sætninger

  2. Forespørg på de sidste N relaterede rækker pr. række

  3. MySQL-forespørgsel for at få kolonnenavne?

  4. Hvad er Sequence i oracle