sql >> Base de Datos >  >> RDS >> Sqlserver

Convierta la columna de fecha y hora de UTC a la hora local en la declaración de selección

Puede hacer esto de la siguiente manera en SQL Server 2008 o superior:

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

También puedes hacer lo menos detallado:

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

Hagas lo que hagas, no usa - para restar fechas, porque la operación no es atómica, y en ocasiones obtendrá resultados indeterminados debido a las condiciones de carrera entre la fecha y hora del sistema y la fecha y hora local que se verifican en diferentes momentos (es decir, no atómicamente).

Tenga en cuenta que esta respuesta no tiene en cuenta el horario de verano. Si desea incluir un ajuste de DST, consulte también la siguiente pregunta SO:

Cómo crear la función de inicio y finalización del horario de verano en SQL Server