我有 SQL Server 2014 Express,我得到了一个 SQL 脚本,该脚本在某些查询中包含“AT TIME ZONE”。由于 SQL Server 2016 中提供了此功能,因此我无法运行这些查询/脚本。
我使用的是 Windows 7,因此无法安装 SQL Server 2016,因为 SQL Server 2016 不支持 Windows 7。
SQL Server 2014 或更早版本的 SQL Server 的“AT TIME ZONE”查询的替代方案是什么?
谢谢
最佳答案
首先,“AT TIME ZONE”没有直接的替代方案。它是早期版本中两个函数(即“SWITCHOFFSET”和“TODATETIMEOFFSET”)提供的功能的组合
使用 SWITCHOFFSET 函数,您可以将输入的 DATETIMEOFFSET 值返回到 请求的偏移项。它根据第二个参数更改现有的 DateTime 值和偏移量(如果提供的 DateTime 是非特定偏移量,则将其视为“0:00”偏移量)。
使用 TODATETIMEOFFSET,您可以创建一个不感知日期时间的偏移量来偏移感知数据。它仅将偏移量设置为第二个参数中指定的值。
现在“AT TIME ZONE”提供了上述两者的优点。正如微软提到的AT TIME ZONE ,仅当提供的值可感知偏移量时,它才会更改日期时间和偏移量,否则仅添加偏移量。
SELECT
SWITCHOFFSET('20130212 14:00:00.0000000 -08:00', '-05:00') AS
[SWITCHOFFSET_FROMOffsetAware],
SWITCHOFFSET('20130212 14:00:00.00', '-05:00') AS
[SWITCHOFFSET_FROMOffsetUnAware],
TODATETIMEOFFSET('20130212 14:00:00.0000000 -08:00', '-05:00') AS
[TODATETIMEOFFSET_FROMOffsetAware],
TODATETIMEOFFSET('20130212 14:00:00.00', '-05:00') AS
[TODATETIMEOFFSET_FROMOffsetUnAware],
CAST('20130212 14:00:00.0000000 -08:00' as DATETIMEoffset)
AT TIME ZONE 'Easter Island Standard Time' as [TIMEZONE_FROMOffsetAware],
CAST('20130212 14:00:00' as DATETIME)
AT TIME ZONE 'Easter Island Standard Time' as [TIMEZONE_FROMOffsetUnAware];
现在应该看到没有直接的替代方案,但是,您可以根据具体情况重做是否应该替换“SWITCHOFFSET”或“TODATETIMEOFFSET”函数来代替“AT TIME ZONE”提示。
要查找时区名称的等效偏移量,请使用以下查询(适用于 SQL 2014 或使用 fiddle)
select * from sys.time_zone_info
关于sql-server - "AT TIME ZONE"用于 SQL Server 2014 或更早版本的 SQL Server,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50246823/