Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Converter a coluna Datetime do UTC para a hora local na instrução select


Você pode fazer isso da seguinte maneira no SQL Server 2008 ou superior:
SELECT CONVERT(datetime, 
               SWITCHOFFSET(CONVERT(datetimeoffset, 
                                    MyTable.UtcColumn), 
                            DATENAME(TzOffset, SYSDATETIMEOFFSET()))) 
       AS ColumnInLocalTime
FROM MyTable

Você também pode fazer o menos detalhado:
SELECT DATEADD(mi, DATEDIFF(mi, GETUTCDATE(), GETDATE()), MyTable.UtcColumn) 
       AS ColumnInLocalTime
FROM MyTable

Faça o que fizer, não faça use - para subtrair datas, porque a operação não é atômica, e ocasionalmente você obterá resultados indeterminados devido a condições de corrida entre a data e hora do sistema e a data e hora local sendo verificadas em momentos diferentes (ou seja, não atômica).

Observe que esta resposta não leva em consideração o horário de verão. Se você quiser incluir um ajuste de horário de verão, consulte também a seguinte pergunta SO:

Como criar a função de início e fim do horário de verão no SQL Server