SWITCHOFFSET (Transact-SQL)

適用於:SQL ServerAzure SQL DatabaseAzure SQL 受控執行個體Azure Synapse AnalyticsAnalytics Platform System (PDW)

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

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

Transact-SQL 語法慣例

Syntax

SWITCHOFFSET ( datetimeoffset_expression, timezoneoffset_expression )   

注意

若要檢視 SQL Server 2014 (12.x) 和舊版的 Transact-SQL 語法,請參閱 舊版檔

引數

datetimeoffset_expression
這是可解析成 datetimeoffset(n) 值的運算式。

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

傳回類型

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

備註

請使用 SWITCHOFFSET 來選取 datetimeoffset 值,以便進入與原本儲存之時區位移不同的時區位移。 SWITCHOFFSET 不會更新已儲存的 time_zone 值。

SWITCHOFFSET 可用來更新 datetimeoffset 資料行。

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