Condividi tramite


SWITCHOFFSET (Transact-SQL)

Si applica a: SQL Server Database SQL di Azure Istanza gestita di SQL di Azure Azure Synapse Analytics Piattaforma di strumenti analitici (PDW)

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 tutte le funzioni e i tipi di dati di data e ora Transact-SQL, vedere Funzioni e tipi di dati di data e ora (Transact-SQL).

Convenzioni relative alla sintassi Transact-SQL

Sintassi

SWITCHOFFSET ( datetimeoffset_expression, timezoneoffset_expression )   

Argomenti

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

timezoneoffset_expression
Espressione nel formato [+|-]TZH:TZM o intero con segno (relativo ai minuti) che rappresenta la differenza di fuso orario. Deve essere sensibile all'ora legale e adattato ad essa.

Tipo restituito

datetimeoffset con la precisione frazionaria dell'argomento datetimeoffset_expression.

Osservazioni:

Usare SWITCHOFFSET per selezionare un valore datetimeoffset in una differenza fuso orario diversa dalla differenza fuso orario che è stata archiviata originalmente. SWITCHOFFSET non aggiorna il valore time_zone archiviato.

È possibile usare SWITCHOFFSET per aggiornare una colonna datetimeoffset.

L'utilizzo di SWITCHOFFSET con la funzione GETDATE() può determinare un'esecuzione lenta 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 il problema, utilizzare l'hint per la query OPTION (RECOMPILE) per forzare la ricompilazione del piano di query da parte di Query Optimizer la volta successiva che viene eseguita la stessa query. A quel punto Query Optimizer disporrà di stime precise sulla cardinalità e offrirà un piano di query più efficace. Per altre informazioni sull'hint per la query RECOMPILE, vedere Hint per la query (Transact-SQL).

DECLARE @dt 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  

Vedi anche

CAST e CONVERT (Transact-SQL)
AT TIME ZONE (Transact-SQL)