用于将历史DateTime值转换为DateTimeOffset的纯SQL解决方案?

时间:2016-06-09 19:31:22

标签: sql-server-2008 timezone datetimeoffset

我有一个包含DateTime值的大表,需要转换为DateTimeOffset。

我可以使用以下语句来执行此操作,该语句保留日期/时间并添加当前时区偏移量。

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

问题是这些值中的一些代表几年前的日期,有些是夏令时,有些则不是,因此将当前偏移量放在所有这些值中实际上是不正确的。其中一些应该具有-700的偏移,一些应该具有-800的偏移。

如果所有值的时区一致,我如何获得正确的偏移量?我知道如何在.net中完成,因为有一套很好的函数可以做到,但我需要一个纯粹的SQL解决方案,没有CLR函数。

1 个答案:

答案 0 :(得分:2)

如果您可以升级到SQL Server 2016,或使用Azure SQL数据库(v12),那么您可以使用新的AT TIME ZONE功能,这与您可能使用的TimeZoneInfo.ConvertTime方法非常相似在.NET中。

否则,请考虑使用标准IANA时区的第三方解决方案,例如我的SQL Server Time Zone Support包。

More on both in this related answer