SWITCHOFFSET (Transact-SQL)

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

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

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

Transact-SQL 语法约定

语法

SWITCHOFFSET ( datetimeoffset_expression, timezoneoffset_expression )   

注意

若要查看 SQL Server 2014 (12.x) 及更早版本的 Transact-SQL 语法,请参阅早期版本文档

自变量

datetimeoffset_expression
是一个可以解析为 datetimeoffset(n) 值的表达式

timezoneoffset_expression
是一个格式为 [+|-]TZH:TZM 的表达式,或是一个表示时区偏移量的带符号整数(分钟数),假定它能够感知夏时制并作出相应调整。

返回类型

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

注解

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

SWITCHOFFSET 可用于更新 datetimeoffset 列

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

DECLARE @dt 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  

另请参阅

CAST 和 CONVERT (Transact-SQL)
AT TIME ZONE (Transact-SQL)