Можете да направите това по следния начин на SQL Server 2008 или по-нова версия:
SELECT CONVERT(datetime,
SWITCHOFFSET(CONVERT(datetimeoffset,
MyTable.UtcColumn),
DATENAME(TzOffset, SYSDATETIMEOFFSET())))
AS ColumnInLocalTime
FROM MyTable
Можете също да направите по-малко многословното:
SELECT DATEADD(mi, DATEDIFF(mi, GETUTCDATE(), GETDATE()), MyTable.UtcColumn)
AS ColumnInLocalTime
FROM MyTable
Каквото и да правите, не използвайте -
за изваждане на датите, тъй като операцията не е атомарна и понякога ще получите неопределени резултати поради условия на състезание между системната дата и час и местната дата и час, които се проверяват в различно време (т.е. неатомно).
Моля, имайте предвид, че този отговор не взема предвид DST. Ако искате да включите корекция за DST, моля, вижте и следния въпрос SO:
Как да създадете функция за начало и край на лятното часово време в SQL Server