2016-06-09 4 views
1

У меня есть большая таблица с значениями DateTime, которые нужно преобразовать в DateTimeOffset.Pure SQL-решение для преобразования исторических значений DateTime в DateTimeOffset?

Я могу сделать это, используя следующий оператор, который сохраняет дату/время и добавляет смещение текущего часового пояса.

TODATETIMEOFFSET([StatisticDateUTC], DATENAME(tz, SYSDATETIMEOFFSET())) 

Проблема некоторые из этих значений представляют собой финики лет назад, некоторые в летнее время, некоторые нет, так что на самом деле это неправильно поставить тока смещения во всех из них. Некоторые из них должны иметь смещение -700, у кого-то должно быть смещение -800.

Если часовой пояс был согласован для всех значений, как я могу получить правильное смещение? Я знаю, как это можно сделать в .net, так как для этого есть хороший набор функций, но мне нужно чистое решение sql, никаких функций CLR.

ответ

2

Если вы можете перейти на SQL Server 2016 или использовать базу данных Azure SQL (v12), то вы можете использовать новую функцию AT TIME ZONE, которая очень похожа на метод TimeZoneInfo.ConvertTime, с которым вы можете использовать .NET.

В противном случае рассмотрите стороннее решение, например, мой пакет SQL Server Time Zone Support, который использует стандартные часовые пояса IANA.

More on both in this related answer.