我正在使用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”查询的替代是什么?
谢谢,
答案 0 :(得分:0)
首先,没有直接替代" AT TIME ZONE"。它是早期版本中两个功能提供的功能组合,即" SWITCHOFFSET"和" TODATETIMEOFFSET"
使用SWITCHOFFSET函数,您可以在a中返回输入DATETIMEOFFSET值 请求的偏移项。它根据第二个参数改变现有的DateTime值和偏移量(如果提供的DateTime是特定的偏移量,那么它被视为" 0:00"偏移量)。
使用TODATETIMEOFFSET,您可以使偏移量不知道DateTime来抵消感知数据。它仅将偏移量设置为第二个参数中指定的值。
现在"在时区"这提供了上述两者的优点。正如Microsoft AT TIME ZONE所提到的,只有当提供的值可以识别偏移时,它才会改变DateTime和Offset,否则只会添加offset。
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];
请参阅SqlFiddle
现在应该看到没有直接替代方案但是,您可以根据具体情况重做是否应该替换" SWITCHOFFSET"或" TODATETIMEOFFSET"代替" AT TIME ZONE"提示。
要查找时区名称的偏移量,请使用以下查询(适用于SQL 2014或使用小提琴)
select * from sys.time_zone_info