SWITCHOFFSET (Transact-SQL)

适用于:SQL ServerAzure SQL 数据库Azure SQL 托管实例Azure Synapse AnalyticsAnalytics Platform System (PDW)

返回从存储的时区偏移量变为指定的新时区偏移量时得到的 datetimeoffset 值

有关所有 Transact-SQL 日期和时间数据类型和函数的概述,请参阅 日期和时间数据类型和函数

Transact-SQL 语法约定

语法

SWITCHOFFSET ( datetimeoffset_expression , timezoneoffset_expression )

参数

datetimeoffset_expression

可解析为 datetimeoffset(n) 值的表达式。

timezoneoffset_expression

采用 [+|-]TZH:TZM 或表示时区偏移量的带符号整数(分钟)格式的表达式,假定为夏令时感知和调整。

返回类型

具有 datetimeoffset_expression 参数的小数精度的 datetimeoffset。

注解

用于 SWITCHOFFSET 选择与最初存储的时区偏移量不同的时区偏移量中的 datetimeoffset 值。 SWITCHOFFSET 不会更新存储 time_zone 值。

SWITCHOFFSET 可用于更新 datetimeoffset 列。

与函数GETDATE()SWITCHOFFSET起使用可能会导致查询运行缓慢。 这是因为查询优化器无法获取 datetime 值的准确基数估计值。 若要解决此问题,请使用 OPTION (RECOMPILE) 查询提示强制查询优化器在下一次执行同一查询时重新编译查询计划。 然后,优化器具有准确的基数估计,并生成更高效的查询计划。 有关查询提示的详细信息 RECOMPILE ,请参阅 查询提示

DECLARE @dt AS DATETIMEOFFSET = switchoffset(CONVERT (DATETIMEOFFSET, GETDATE()), '-04:00');

SELECT *
FROM t
WHERE c1 > @dt
OPTION (RECOMPILE);

示例

下例使用 SWITCHOFFSET 显示与数据库中所存储的值不同的时区偏移量。

CREATE TABLE dbo.test (ColDatetimeoffset DATETIMEOFFSET);
GO

INSERT INTO dbo.test VALUES ('1998-09-20 7:45:50.71345 -5:00');
GO

SELECT SWITCHOFFSET (ColDatetimeoffset, '-08:00')
FROM dbo.test;
GO
--Returns: 1998-09-20 04:45:50.7134500 -08:00

SELECT ColDatetimeoffset
FROM dbo.test;
--Returns: 1998-09-20 07:45:50.7134500 -05:00