我有一个包含DateTime值的大表,需要转换为DateTimeOffset。
我可以使用以下语句来执行此操作,该语句保留日期/时间并添加当前时区偏移量。
TODATETIMEOFFSET([StatisticDateUTC], DATENAME(tz, SYSDATETIMEOFFSET()))
问题是这些值中的一些代表几年前的日期,有些是夏令时,有些则不是,因此将当前偏移量放在所有这些值中实际上是不正确的。其中一些应该具有-700的偏移,一些应该具有-800的偏移。
如果所有值的时区一致,我如何获得正确的偏移量?我知道如何在.net中完成,因为有一套很好的函数可以做到,但我需要一个纯粹的SQL解决方案,没有CLR函数。
答案 0 :(得分:2)
如果您可以升级到SQL Server 2016,或使用Azure SQL数据库(v12),那么您可以使用新的AT TIME ZONE
功能,这与您可能使用的TimeZoneInfo.ConvertTime
方法非常相似在.NET中。
否则,请考虑使用标准IANA时区的第三方解决方案,例如我的SQL Server Time Zone Support包。