“AT TIME ZONE”替代SQL Server 2014或更早版本的SQL Server

时间:2018-05-09 06:29:39

标签: sql-server timezone sql-server-2014 sql-server-2016

我正在使用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”查询的替代是什么?

谢谢,

1 个答案:

答案 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