In SQL Server, SWITCHOFFSET()
può essere utilizzata per restituire un datetimeoffset valore che viene modificato dall'offset di fuso orario memorizzato a un nuovo offset di fuso orario specificato.
Di seguito sono riportati esempi di come funziona questa funzione.
Sintassi
Innanzitutto, ecco come funziona la sintassi:
SWITCHOFFSET ( DATETIMEOFFSET, time_zone )
Dove DATETIMEOFFSET
è un'espressione che può essere risolta in un datetimeoffset(n) valore e time_zone
è una stringa di caratteri nel formato [+|-]TZH:TZM o un numero intero con segno (di minuti) che rappresenta l'offset del fuso orario e si presume che sia consapevole e regolato dell'ora legale.
Il risultato viene restituito come datetimeoffset con la precisione frazionaria del DATETIMEOFFSET
argomento.
Esempio 1
Ecco un semplice esempio di utilizzo:
SELECT SWITCHOFFSET( '2112-01-01', '+08:00' ) AS Result;
Risultato:
Result ---------------------------------- 2112-01-01 08:00:00.0000000 +08:00
Esempio 2
Questo esempio utilizza un valore negativo:
SELECT SWITCHOFFSET( '2112-01-01', '-08:00' ) AS Result;
Risultato:
Result ---------------------------------- 2111-12-31 16:00:00.0000000 -08:00
Esempio 4
In questo esempio dichiariamo una variabile e le assegniamo una data utilizzando datetimeoffset tipo di dati. Quindi applichiamo SWITCHOFFSET()
a quella data e confrontarla con la data originale.
DECLARE @date datetimeoffset = '2112-01-01 00:00:00.0000000 +04:00'; SELECT @date AS 'Original Date', SWITCHOFFSET( @date, '+08:00' ) AS '+08:00';
Risultato:
Original Date +08:00 ---------------------------------- ---------------------------------- 2112-01-01 00:00:00.0000000 +04:00 2112-01-01 04:00:00.0000000 +08:00
Esempio 5
Qui facciamo la stessa cosa dell'esempio precedente, ma usiamo il SYSDATETIMEOFFSET()
funzione per generare la data/ora corrente e l'offset.
SELECT SYSDATETIMEOFFSET() AS 'Current Date', SWITCHOFFSET( SYSDATETIMEOFFSET(), '+08:00' ) AS '+08:00';
Risultato:
Current Date +08:00 ---------------------------------- ---------------------------------- 2018-06-05 17:05:36.9415309 +10:00 2018-06-05 15:05:36.9415309 +08:00
Esempio 6
Questo esempio è lo stesso del precedente, tranne per il fatto che aggiungiamo un valore negativo.
SELECT SYSDATETIMEOFFSET() AS 'Current Date', SWITCHOFFSET( SYSDATETIMEOFFSET(), '-08:00' ) AS '-08:00';
Risultato:
Current Date -08:00 ---------------------------------- ---------------------------------- 2018-06-05 17:12:07.1122856 +10:00 2018-06-04 23:12:07.1122856 -08:00
Esempio 7
Puoi anche fornire l'offset del fuso orario come numero intero anziché come stringa:
SELECT SWITCHOFFSET( '2112-01-01', -180 ) AS Result;
Risultato:
Result ---------------------------------- 2111-12-31 21:00:00.0000000 -03:00