T-SQL从时区名称获取抵消时间

时间:2015-10-02 13:58:09

标签: sql-server tsql timezone offset

在字段TimeZoneId的数据库中,我有这样的字符串值:

GMT Standard Time
W. Europe Standard Time
Romance Standard Time
FLE Standard Time

我需要通过这些字符串值获得以小时为单位的int值偏移,即

GMT Standard Time       | 0
W. Europe Standard Time | 1
Romance Standard Time   | 1
FLE Standard Time       | 2

所有字符串值: https://msdn.microsoft.com/en-us/library/ms912391(v=winembedded.11).aspx

我只需要使用T-SQL。

1 个答案:

答案 0 :(得分:2)

一些事情:

  • 您提供的链接严重过时,仅适用于Windows Embedded POS 1.1。通过查看注册表中的HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones或.NET中的TimeZoneInfo.GetSystemTimeZones(),或通过在命令提示符下调用tzutil /L,可以找到更准确的Windows时区列表。

  • 您要求的内容无效,因为时区不能用单个数字表示。时区包括夏令时的偏移更改以及每年的历史更改。请参阅timezone tag wiki

  • 中的“时区!=偏移”
  • 使用时区通常最好在应用程序层而不是数据库中完成。在DB层只有少数场景需要它。如果你不是绝对需要在数据库中这样做,那就不要。

  • 与其他数据库平台不同,SQL Server没有内置的时区转换功能。

  • 要添加时区转换功能,您需要维护时区数据表,并编写转换函数以使用该数据。数据经常变化,因此保持最新状态非常重要。

  • 幸运的是,我已经完成了大部分工作。您可以使用我的SQL Server Time Zone Support项目。它目前适用于IANA / TZDB时区(例如America/New_YorkEurope/London)而非Windows时区,但is on the to-do list。您可以等待此功能,也可以convert to IANA zones if you like