SWITCHOFFSET (Transact-SQL)

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

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

适用范围:SQL Server(SQL Server 2008 至当前版本),Windows Azure SQL Database(初始版本至当前版本)。

主题链接图标 Transact-SQL 语法约定

语法

SWITCHOFFSET ( DATETIMEOFFSET, time_zone )

参数

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

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

返回类型

具有 DATETIMEOFFSET 参数的小数精度的 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)