共用方式為


開關偏移 (Transact-SQL)

適用於:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse Analytics分析平台系統(PDW)Microsoft Fabric 中的 SQL 資料庫

傳回從已儲存的時區位移變更為指定新時區位移的 dateoffset 值。

如需所有 Transact-SQL 日期和時間資料類型和函式的概觀,請參閱 日期和時間資料類型和函式

Transact-SQL 語法慣例

語法

SWITCHOFFSET ( datetimeoffset_expression , timezoneoffset_expression )

引數

datetimeoffset_expression

可解析為 datetimeoffset(n) 值的運算式。

timezoneoffset_expression

格式為 [+|-]TZH:TZM 的運算式,或代表時區位移的帶正負號整數 (分鐘),並假設為日光節約感知並調整。

傳回類型

datetimeoffset,小數精確度為 datetimeoffset_expression 引數。

備註

用來 SWITCHOFFSET 選取 日期時間偏移 值,以取得與最初儲存的時區偏移不同的時區偏移。 SWITCHOFFSET 不會更新儲存的 time_zone 值。

SWITCHOFFSET 可用來更新 datetimeOffset 欄。

搭配函式SWITCHOFFSET使用GETDATE()可能會導致查詢執行緩慢。 這是因為查詢最佳化工具無法取得日期時間值的準確基數估計值。 若要解決此問題,請使用 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