Condividi tramite


SWITCHOFFSET (Transact-SQL)

Si applica a:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsSistema di Piattaforma Analitica (PDW)Database SQL in Microsoft Fabric

Restituisce un valore datetimeoffset che è stato convertito dalla differenza di fuso orario archiviata a una nuova differenza di fuso orario specificata.

Per una panoramica di tutti i tipi di dati e le funzioni di data e ora Transact-SQL, vedere Funzioni e tipi di dati di data e ora.

Convenzioni relative alla sintassi Transact-SQL

Sintassi

SWITCHOFFSET ( datetimeoffset_expression , timezoneoffset_expression )

Argomenti

datetimeoffset_expression

Espressione che può essere risolta in un valore datetimeoffset(n).

timezoneoffset_expression

Un'espressione nel formato [+|-]TZH:TZM o un intero con segno (di minuti) che rappresenta l'offset del fuso orario e viene considerato compatibile con l'ora legale e regolato.

Tipi restituiti

datetimeoffset con la precisione frazionaria dell'argomento datetimeoffset_expression.

Osservazioni:

Utilizzare SWITCHOFFSET per selezionare un valore datetimeoffset in una differenza di fuso orario diversa dall'offset del fuso orario archiviato in origine. SWITCHOFFSET non aggiorna il valore time_zone archiviato.

SWITCHOFFSET può essere usato per aggiornare una colonna datetimeoffset .

L'uso SWITCHOFFSET con la funzione GETDATE() può causare un rallentamento dell'esecuzione della query. Questo perché Query Optimizer non è in grado di ottenere stime relative alla cardinalità precise per il valore di data e ora. Per risolvere questo problema, usare l'hint OPTION (RECOMPILE) per la query per forzare la ricompilazione di un piano di query alla successiva esecuzione della stessa query. L'utilità di ottimizzazione dispone quindi di stime accurate della cardinalità e produce un piano di query più efficiente. Per altre informazioni sull'hint per la RECOMPILE query, vedere Hint per la query.

DECLARE @dt AS DATETIMEOFFSET = switchoffset(CONVERT (DATETIMEOFFSET, GETDATE()), '-04:00');

SELECT *
FROM t
WHERE c1 > @dt
OPTION (RECOMPILE);

Esempi

Nell'esempio seguente viene utilizzato SWITCHOFFSET per visualizzare una differenza di fuso orario diversa dal valore archiviato nel database.

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