I SQL Server kan du använda TODATETIMEOFFSET()
funktion för att returnera en datumtidsförskjutning värde som är översatt från en datetime2 uttryck. Den godtar två argument; datumet och den offset som du vill tillämpa på det datumet.
Nedan finns exempel på användning.
Syntax
Syntaxen för TODATETIMEOFFSET()
går så här:
TODATETIMEOFFSET ( expression , time_zone )
Där expression
är ett uttryck som löser sig till en datetime2 värde och time_zone
är den tidszon du vill tillämpa på uttrycket (datum).
Du kan ange tidszonen i minuter eller timmar. Om du tillhandahåller det på några minuter, använd ett heltal (t.ex. -120
), annars för att ange det i timmar, använd en sträng (t.ex. '+04.00'
). Intervallet för tidszonen är +14 till -14 (timmar).
Dessutom tolkas datumet du anger i lokal tid för den angivna tidszonen.
Exempel 1
Här är ett grundläggande exempel på användning:
SELECT TODATETIMEOFFSET( '2112-01-01 00:00:00', '+08:00' ) AS Result;
Resultat:
Result ---------------------------------- 2112-01-01 00:00:00.0000000 +08:00
Exempel 2 – Negativt värde
Detta är samma som i föregående exempel, förutom att jag använder ett negativt värde istället:
SELECT TODATETIMEOFFSET( '2112-01-01 00:00:00', '-08:00' ) AS Result;
Resultat:
Result ---------------------------------- 2112-01-01 00:00:00.0000000 -08:00
Exempel 3 – Använda en datetime2-variabel
I det här exemplet ställer jag uttryckligen in en variabel med en datetime2 värde och använd sedan TODATETIMEOFFSET()
till det värdet och jämför värdena:
DECLARE @date datetime2 = '2112-01-01 00:00:00.0000000'; SELECT @date AS 'Original Date', TODATETIMEOFFSET( @date, '+08:00' ) AS '+08:00';
Resultat:
Original Date +08:00 --------------------------- ---------------------------------- 2112-01-01 00:00:00.0000000 2112-01-01 00:00:00.0000000 +08:00
Som vi kan se med det här exemplet (och de tidigare), har det ursprungliga datumvärdet inte någon datetime offsetinformation (eftersom det är en datetime2 värde), men när vi kör det genom TODATETIMEOFFSET()
funktion, slutar vi med en datetimeoffset datatyp.
Exempel 4 – Använda en datetimeoffset-variabel
Detta liknar det föregående exemplet, förutom att det ursprungliga datumet är satt som en datumtidsförskjutning värde:
DECLARE @date datetimeoffset = '2112-01-01 00:00:00.0000000 +04:00'; SELECT @date AS 'Original Date', TODATETIMEOFFSET( @date, '+08:00' ) AS '+08:00';
Resultat:
Original Date +08:00 ---------------------------------- ---------------------------------- 2112-01-01 00:00:00.0000000 +04:00 2112-01-01 00:00:00.0000000 +08:00
Exempel 5 – Använda aktuellt datum/tid
I det här exemplet skickar jag in SYSDATETIMEOFFSET()
fungerar som datumuttryck. Den här funktionen genererar aktuellt datum/tid för datorn som kör SQL Server-instansen:
SELECT SYSDATETIMEOFFSET() AS 'Current Date', TODATETIMEOFFSET( SYSDATETIMEOFFSET(), '+08:00' ) AS '+08:00';
Resultat:
Current Date +08:00 ---------------------------------- ---------------------------------- 2018-06-06 08:50:57.8382284 +10:00 2018-06-06 08:50:57.8382284 +08:00
Exempel 6 – Ange tidszonförskjutningen som ett heltal
Som nämnts kan du också ange tidszonförskjutningen som ett heltal istället för en sträng:
SELECT TODATETIMEOFFSET( '2112-01-01 00:00:00', -180 ) AS Result;
Resultat:
Result ---------------------------------- 2112-01-01 00:00:00.0000000 -03:00