Możesz to zrobić w następujący sposób w SQL Server 2008 lub nowszym:
SELECT CONVERT(datetime,
SWITCHOFFSET(CONVERT(datetimeoffset,
MyTable.UtcColumn),
DATENAME(TzOffset, SYSDATETIMEOFFSET())))
AS ColumnInLocalTime
FROM MyTable
Możesz też zrobić mniej gadatliwe:
SELECT DATEADD(mi, DATEDIFF(mi, GETUTCDATE(), GETDATE()), MyTable.UtcColumn)
AS ColumnInLocalTime
FROM MyTable
Cokolwiek robisz, nie rób użyj -
aby odjąć daty, ponieważ operacja nie jest niepodzielna, a czasami otrzymasz nieokreślone wyniki z powodu wyścigu między datą systemową a lokalną datą i godziną sprawdzaną w różnych momentach (tj. nieatomowo).
Należy pamiętać, że ta odpowiedź nie uwzględnia czasu letniego. Jeśli chcesz uwzględnić korektę czasu letniego, zapoznaj się również z następującym pytaniem SO:
Jak utworzyć funkcję rozpoczęcia i zakończenia czasu letniego na serwerze SQL