在字段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。
答案 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_York
或Europe/London
)而非Windows时区,但is on the to-do list。您可以等待此功能,也可以convert to IANA zones if you like。