如何将数据转换为UTC的sql server 2005 express数据库中的所有日期时间列

时间:2011-07-15 19:11:21

标签: sql-server sql-server-2005 tsql sql-server-2008 sql-server-2000

背景:我们最近升级为处理UTC。即,通过每个sp和func并更改了t-sql代码来处理utc。例如,将getdate()更改为getutcdate()等。对于新的货件,我们很好,db是空白的。对于想要保留数据的老客户,我们需要运行一个脚本,将所有日期更新为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 个答案:

答案 0 :(得分:1)

假设您知道UTC与存储数据的时区之间的偏差,那很简单:

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

请注意,这可能是消极或积极的,我不知道格林威治的哪一方。

当然,如果您处于观察夏令时的时区,这会变得更加复杂;在这种情况下,您可能需要更广泛的解决方案,例如使用日历表。例如,如果您的数据在乔治布什改变美国DST规则之前延伸,这一点尤为复杂。我有an article from a long time ago that may be useful;最近的系列节目在这里:

此外,如果您的任何数据在春季前进/后退日的12:00 AM到2:00 AM之间落入该窗口,我无法确定更改它是否正确,因为它是转换日或不要改变它,因为它是在凌晨2点之前。