我在SQL Server数据库中保存了类似于America/Vancouver
的时区名称。我想要在SQL中从时区名称获取UTC偏移量,例如 America/Vancouver
的偏移量为 -08:00
。那么我该如何编写SQL查询呢?非常感谢您的帮助。
我在SQL Server数据库中保存了类似于America/Vancouver
的时区名称。我想要在SQL中从时区名称获取UTC偏移量,例如 America/Vancouver
的偏移量为 -08:00
。那么我该如何编写SQL查询呢?非常感谢您的帮助。
很遗憾,SQL Server目前还不支持直接使用IANA时区标识符(例如America/Vancouver
)。目前最好的选择是在应用层将IANA标识符转换为相应的Windows时区标识符,并将其存储在SQL Server中。
例如,如果您在应用层中运行.NET,可以使用我发布的TimeZoneConverter 项目:
string tz = TZConvert.IanaToWindows("America/Vancouver");
// Result: "Pacific Standard Time"
接下来,您可以在SQL Server代码中使用AT TIME ZONE
函数:
SELECT sysdatetimeoffset() AT TIME ZONE 'Pacific Standard Time'
以上代码将给出当前日期、时间和所提供时区的偏移量,您可以将此作为查询用户可用性(在问题评论中提到)的基础。
请注意,偏移调整会因夏令时是否生效而有所不同。尽管 Windows 标识符中有“标准”一词,但如适用,确实会考虑 DST。
或者,如果由于某些原因你必须完全在 SQL Server 中执行此操作而不转换为 Windows 时区,则需要依赖于我的 SqlServerTimeZoneSupport 项目等项目。那个项目有点旧且维护不太好,如果可以,请避免使用该方法。
SELECT DATEPART(tz, (CAST('2021-01-01' AS DATETIMEOFFSET) AT TIME ZONE 'Central European Standard Time'));
America/Vancouver
。因此,我需要将工作的UTC时间转换为工作者的时区,并与可用时间段进行比较。 - Haresh Makwana