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