Oracle TZ_OFFSET的SQL Server变体

时间:2017-09-27 05:00:41

标签: sql sql-server oracle timezone offset

在Oracle中执行以下SQL:

SELECT TZ_OFFSET('Europe/Brussels') from dual;

返回值+02:00

请注意,此功能可用于Olsson表示法中的任何时区。这与数据库服务器无关。

我想知道在MS Sql Server中是否存在类似的功能,你可以询问给定时区的偏移量(以微软时区表示法)。

1 个答案:

答案 0 :(得分:1)

从SQL 2016开始,在Azure SQL数据库中,您可以通过以下方式实现此目的:

SELECT DATENAME(tz, SYSDATETIMEOFFSET() AT TIME ZONE 'Romance Standard Time')

-- Output: '+02:00'

请注意,时区名称是 Windows 时区标识符,而不是IANA TZ(aka Olson)标识符。有关差异的更多信息,请参阅the timezone tag wiki

如果您要使用IANA TZ标识符,或者您使用的是不具有AT TIME ZONE功能的旧版SQL Server,则可以使用我的SQL Server Time Zone Support project,以下内容:

SELECT DATENAME(tz, Tzdb.SwitchZone(SYSDATETIMEOFFSET(), 'Europe/Brussels'))

-- Output: '+02:00'

另请注意,只能为特定参考点的时区计算偏移量。在我的示例中,您可以看到我已使用SYSDATETIMEOFFSET()选择了当前系统时间。 (当前时间隐式与Oracle的TZ_OFFSET函数。)