"AT TIME ZONE" 替代 SQL Server 2014 或更早版本的 SQL Server
"AT TIME ZONE" alternate for SQL Server 2014 or earlier versions of SQL Server
我有 SQL Server 2014 Express,我得到一个 SQL 脚本,在某些查询中有 "AT TIME ZONE"。由于此功能在 SQL Server 2016 中提供,因此我无法 运行 这些 queries/Script.
我有 Windows 7,所以安装 SQL Server 2016 不是一个选项,因为 SQL Server 2016 不支持 Windows 7。
"AT TIME ZONE" 查询 SQL Server 2014 或更早版本的 SQL Server 的替代方法是什么?
谢谢,
首先没有 "AT TIME ZONE" 的直接替代品。它是早期版本中两个函数提供的特性的组合,即 "SWITCHOFFSET" 和 "TODATETIMEOFFSET"
使用 SWITCHOFFSET 函数,您可以 return 一个输入的 DATETIMEOFFSET 值
请求的偏移量 term.It 根据第二个参数更改现有的 DateTime 值和偏移量(如果提供的 DateTime 偏移量不明确,则将其视为“0:00”偏移量)。
使用 TODATETIMEOFFSET,您可以使偏移量不感知 DateTime 以偏移感知数据。它仅将偏移量设置为第二个参数中指定的值。
现在 "AT TIME ZONE" 这提供了上述两者的好处。如 Microsoft 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 2014 Express,我得到一个 SQL 脚本,在某些查询中有 "AT TIME ZONE"。由于此功能在 SQL Server 2016 中提供,因此我无法 运行 这些 queries/Script.
我有 Windows 7,所以安装 SQL Server 2016 不是一个选项,因为 SQL Server 2016 不支持 Windows 7。
"AT TIME ZONE" 查询 SQL Server 2014 或更早版本的 SQL Server 的替代方法是什么?
谢谢,
首先没有 "AT TIME ZONE" 的直接替代品。它是早期版本中两个函数提供的特性的组合,即 "SWITCHOFFSET" 和 "TODATETIMEOFFSET"
使用 SWITCHOFFSET 函数,您可以 return 一个输入的 DATETIMEOFFSET 值 请求的偏移量 term.It 根据第二个参数更改现有的 DateTime 值和偏移量(如果提供的 DateTime 偏移量不明确,则将其视为“0:00”偏移量)。
使用 TODATETIMEOFFSET,您可以使偏移量不感知 DateTime 以偏移感知数据。它仅将偏移量设置为第二个参数中指定的值。
现在 "AT TIME ZONE" 这提供了上述两者的好处。如 Microsoft 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