SWITCHOFFSET (Transact-SQL)

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

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

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

语法

SWITCHOFFSET ( DATETIMEOFFSET, time_zone )

参数

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

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

返回类型

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

注释

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

SWITCHOFFSET 可用于更新 datetimeoffset 列。

将 SWITCHOFFSET 与函数 GETDATE() 一起使用会导致查询运行缓慢,因为查询优化器无法获取 GETDATE 值的准确基数估值。 我们建议您预先计算 GETDATE 值,然后在查询中指定该值,如以下示例中所示。 此外,使用 OPTION (RECOMPILE) 查询提示来强制查询优化器在下次执行同一查询时重新编译查询计划。 优化器然后具有 GETDATE() 的准确基数估值,将生成更高效的查询计划。

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)