Condividi tramite


SWITCHOFFSET (Transact-SQL)

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

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

Icona di collegamento a un argomento Convenzioni della sintassi Transact-SQL

Sintassi

SWITCHOFFSET ( DATETIMEOFFSET, time_zone )

Argomenti

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

  • time_zone
    Stringa di caratteri 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 precisione in frazioni dell'argomento DATETIMEOFFSET.

Osservazioni

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

È possibile utilizzare SWITCHOFFSET per aggiornare una colonna datetimeoffset.

Se si utilizza SWITCHOFFSET con la funzione GETDATE() è possibile che la query venga eseguita lentamente perché Query Optimizer non è in grado di ottenere stime di cardinalità corrette per il valore GETDATE. Si consiglia di precalcolare il valore GETDATE e specificare il valore nella query come illustrato nell'esempio seguente. Inoltre, utilizzare l'hint per la query OPTION (RECOMPILE) per forzare in Query Optimizer la compilazione di un nuovo piano di query alla successiva esecuzione della stessa query. Query Optimizer otterrà le stime di cardinalità corrette per GETDATE() e produrrà un piano di query più efficiente.

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

Vedere anche

Riferimento

CAST e CONVERT (Transact-SQL)