适用于:SQL Server
Azure SQL 数据库
Azure SQL 托管实例
Azure Synapse Analytics
Analytics Platform System (PDW)
返回从存储的时区偏移量变为指定的新时区偏移量时得到的 datetimeoffset 值。
有关所有 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