我有一列包含日期、时间和时区信息,如下所示:
Sat, 20 Aug 2016 03:50:04 CDT
Sun, 17 Sep 2017 16:51:46 CEST
Mon, 09 Oct 2017 06:43:27 CET
Thu, 28 Sep 2017 14:05:23 IST
Thu, 05 Oct 2017 08:59:01 IDT
Wed, 28 Jun 2017 17:10:22 CEST
Mon, 18 Sep 2017 18:32:52 GMT
Sat, 27 Aug 2016 07:06:22 MEST
Sat, 06 Aug 2016 13:17:09 UTC
Sat, 16 Jul 2016 23:53:02 PDT
我想将这些都标准化为 UTC。
我可以去掉前导的 5 个字符和尾随的时区字符串,它们转换为 datetime 就好了......但我的问题是:
SQL Server 是否有任何内置函数,我可以在其中传递日期时间、源时区字符串(例如)PDT
和目标时区字符串(例如) UTC
,它将处理转换?
我正在考虑类似于 Oracle 的东西:
FROM_TZ(YOUR_TIMESTAMP, 'UTC') AT TIME ZONE 'America/Dawson_Creek'
我希望能够做到这一点,而不必维护时区偏移表来将字符串值映射到偏移量。我也不想在一些大的案例陈述中硬编码偏移量。
我在 sql server 2014 上,所以我不能将新select * from sys.time_zone_info
的用于 2016 年的时区信息。
有什么想法吗?
如果您的时区是 IANA 时区而不是 Windows 时区,那么您应该能够使用托管在 GitHub 上的 Matt Johnson 的“SQL Server Time Zone Support”项目:
https://github.com/mj1856/SqlServerTimeZoneSupport
它是一个纯 T-SQL 解决方案。
这可以通过 SQL Server 2016 中的新功能 - AT TIME ZONE 实现。
一篇不错的文章https://sqlperformance.com/2016/07/sql-plan/at-time-zone。