Как преобразовать все столбцы даты и времени в SQL Server 2005 Express базы данных с данными в UTC - PullRequest
1 голос
/ 15 июля 2011

фон: мы недавно обновились для обработки UTC. т.е. прошел через каждый sp и func и изменил код t-sql для обработки utc. Например, изменили getdate () на getutcdate () и т. Д. Для новых поставок мы хороши, когда БД пустое Для наших старых клиентов, которые хотят хранить свои данные, нам нужно запустить скрипт, который обновит все даты до utc. Я собираюсь кодировать в t-sql что-то вроде ниже и хочу знать, если это лучший способ. Ниже псевдокод. спасибо

foreach (table in mydb.tables())
{
  foreach (column col in table)
  {
      if (col.type == datetime)
      {
           update table set col = fn_convert_date_to_utc(col)
      }
  }
}

1 Ответ

1 голос
/ 16 июля 2011

Предполагая, что вы знаете смещение между UTC и часовым поясом, в котором хранятся данные, все довольно просто:

DECLARE @offset INT;
SET @offset = <offset>;
UPDATE table SET col = DATEADD(HOUR, @offset, col);

Обратите внимание, что это может быть отрицательным или положительным, я не знаю, какая вы сторона Гринвич.

Конечно, это усложняется, если вы находитесь в часовом поясе, в котором используется летнее время; в этом случае вам может понадобиться более обширное решение, например, использование таблицы календаря. Это особенно сложно, если ваши данные распространяются еще до того, как Джордж Буш, например, изменил американские правила перехода на летнее время. У меня есть статья давным-давно, которая может быть полезна ; более свежая серия здесь:

Кроме того, если какие-либо ваши данные попадают в это окно между 12:00 и 2:00 утра в весенний день вперед / назад, где я никогда не уверен, правильно ли это менять, потому что это день перехода не менять его, потому что это до 2 часов ночи.

...