I SQL Server, SWITCHOFFSET()
funktionen kan användas för att returnera en datumtidsförskjutning värde som ändras från den lagrade tidszonsförskjutningen till en specificerad ny tidszonsförskjutning.
Nedan finns exempel på hur den här funktionen fungerar.
Syntax
Först, så här går syntaxen till:
SWITCHOFFSET ( DATETIMEOFFSET, time_zone )
Där DATETIMEOFFSET
är ett uttryck som kan lösas till en datetimeoffset(n) värde och time_zone
är en teckensträng i formatet [+|-]TZH:TZM eller ett heltal med tecken (av minuter) som representerar tidszonens förskjutning och antas vara sommartidsmedveten och justerad.
Resultatet returneras som en datumtidsförskjutning med samma precision som DATETIMEOFFSET
argument.
Exempel 1
Här är ett grundläggande exempel på användning:
SELECT SWITCHOFFSET( '2112-01-01', '+08:00' ) AS Result;
Resultat:
Result ---------------------------------- 2112-01-01 08:00:00.0000000 +08:00
Exempel 2
Det här exemplet använder ett negativt värde:
SELECT SWITCHOFFSET( '2112-01-01', '-08:00' ) AS Result;
Resultat:
Result ---------------------------------- 2111-12-31 16:00:00.0000000 -08:00
Exempel 4
I det här exemplet deklarerar vi en variabel och tilldelar den ett datum med datetimeoffset data typ. Vi tillämpar sedan SWITCHOFFSET()
till det datumet och jämför det med det ursprungliga datumet.
DECLARE @date datetimeoffset = '2112-01-01 00:00:00.0000000 +04:00'; SELECT @date AS 'Original Date', SWITCHOFFSET( @date, '+08:00' ) AS '+08:00';
Resultat:
Original Date +08:00 ---------------------------------- ---------------------------------- 2112-01-01 00:00:00.0000000 +04:00 2112-01-01 04:00:00.0000000 +08:00
Exempel 5
Här gör vi samma sak som föregående exempel, men vi använder SYSDATETIMEOFFSET()
funktion för att generera aktuellt datum/tid och offset.
SELECT SYSDATETIMEOFFSET() AS 'Current Date', SWITCHOFFSET( SYSDATETIMEOFFSET(), '+08:00' ) AS '+08:00';
Resultat:
Current Date +08:00 ---------------------------------- ---------------------------------- 2018-06-05 17:05:36.9415309 +10:00 2018-06-05 15:05:36.9415309 +08:00
Exempel 6
Det här exemplet är detsamma som det föregående, förutom att vi lägger till ett negativt värde.
SELECT SYSDATETIMEOFFSET() AS 'Current Date', SWITCHOFFSET( SYSDATETIMEOFFSET(), '-08:00' ) AS '-08:00';
Resultat:
Current Date -08:00 ---------------------------------- ---------------------------------- 2018-06-05 17:12:07.1122856 +10:00 2018-06-04 23:12:07.1122856 -08:00
Exempel 7
Du kan också ange tidszonsförskjutningen som ett heltal istället för en sträng:
SELECT SWITCHOFFSET( '2112-01-01', -180 ) AS Result;
Resultat:
Result ---------------------------------- 2111-12-31 21:00:00.0000000 -03:00