sql-server - "AT TIME ZONE"用于 SQL Server 2014 或更早版本的 SQL Server

标签 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”查询的替代方案是什么?

谢谢

最佳答案

首先,“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]; 

参见SqlFiddle

现在应该看到没有直接的替代方案,但是,您可以根据具体情况重做是否应该替换“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/

相关文章:

c# - 与数据库无关的 ASP.Net?

sql - 如何按周对日期字段进行分组(每周从周六开始)?

timezone - 如何更改DBeaver时区/如何停止DBeaver转换日期和时间

java - 两个时区之间的总飞行时间?

SQL Server : Optimal performance clustered indexing and expected indexsize

sql - 将列中的所有值相加

sql - 前 10 名事件持续时间

javascript - 自动检测设备时区的准确度如何?

sql - 用上一行更新当前行 sql server

c# - 是否有用于 sys.tables 和 sys.procedures 的 C# API?