Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Convertir la colonne Datetime de UTC en heure locale dans l'instruction select

Vous pouvez le faire comme suit sur SQL Server 2008 ou supérieur :

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

Vous pouvez également faire le moins verbeux :

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

Quoi que vous fassiez, ne le faites pas utilisez - pour soustraire des dates, car l'opération n'est pas atomique, et vous obtiendrez parfois des résultats indéterminés en raison de conditions de concurrence entre la date et l'heure du système et la date et l'heure locales vérifiées à des moments différents (c'est-à-dire de manière non atomique).

Veuillez noter que cette réponse ne tient pas compte de l'heure d'été. Si vous souhaitez inclure un ajustement DST, veuillez également consulter la question SO suivante :

Comment créer la fonction de début et de fin de l'heure d'été dans SQL Server