Nedan finns tre sätt att returnera tidszonsinformation från ett datetime-värde i Oracle Database.
EXTRACT()
Funktion
EXTRACT(datetime)
Funktionen används för att extrahera olika datetime-delar från ett datetime-värde. Detta inkluderar tidszonsinformationen.
Här är ett exempel:
SELECT EXTRACT(
TIMEZONE_REGION FROM TIMESTAMP '2035-09-26 10:30:45 Australia/Darwin'
)
FROM DUAL;
Resultat:
Australia/Darwin
I det här fallet använde jag TIMEZONE_REGION
argument för att extrahera tidszonsregionen.
De tillgängliga argumenten för att extrahera olika tidszonsinformation är:
TIMEZONE_HOUR
TIMEZONE_MINUTE
TIMEZONE_REGION
TIMEZONE_ABBR
Det är också möjligt att använda en TIMEZONE_OFFSET
argument, även om detta inte visas i Oracles dokumenterade syntax för denna funktion.
Här är ett exempel på hur man skaffar tidszonens förkortning:
SELECT
EXTRACT(TIMEZONE_ABBR FROM TIMESTAMP '2035-09-26 10:30:45 Australia/Darwin')
FROM DUAL;
Resultat:
ACST
Observera att när du använder ovanstående tidszonsargument måste datetime-värdet evalueras till ett uttryck av datatypen TIMESTAMP WITH TIME ZONE
eller TIMESTAMP WITH LOCAL TIME ZONE
.
EXTRACT()
funktionen accepterar även argument för andra datetime-delar, såsom YEAR
, MONTH
, HOUR
, etc.
TO_CHAR(datetime)
Funktion
Vi kan också använda TO_CHAR(datetime)
fungera som en alternativ metod för att hämta tidszonsinformation från ett datum och tid.
Den här funktionen accepterar datetime- eller intervallvärdet som dess första argument och en formatmodell som dess andra argument. Funktionen konverterar sedan värdet till en datatyp VARCHAR2
i det angivna formatet.
Formatmodellen anger formatet som datum/intervallvärdet ska returneras för. Formatmodellen består av ett eller flera formatelement. Detta gör det möjligt för oss att noggrant utforma resultaten för att återspegla vårt önskade format.
Om vi bara vill returnera tidszonsinformation kan vi använda ett av formatelementen för det specifika ändamålet.
Det finns några olika formatelement som vi kan använda när vi returnerar tidszonsinformation från ett datetime-värde.
Låt oss börja med TZR
formatelement:
SELECT TO_CHAR(
TIMESTAMP '2035-09-26 10:30:45 Australia/Darwin',
'TZR'
)
FROM DUAL;
Resultat:
AUSTRALIA/DARWIN
Detta formatelement returnerar tidszonsregionen. Om datetime-värdet bara inkluderar tidszonförskjutningen, returneras det istället.
TZD
formatelement kan användas för att returnera information om sommartid. Den returnerar tidszonsinformationen i en förkortad form.
Exempel:
SELECT TO_CHAR(
TIMESTAMP '2035-09-26 10:30:45 Australia/Darwin',
'TZD'
)
FROM DUAL;
Resultat:
ACST
Alternativt kan vi använda TZH
och TZM
formatera element för att returnera tidszonens timmar och minuter, baserat på tidszonsförskjutningen.
SELECT TO_CHAR(
TIMESTAMP '2035-09-26 10:30:45 Australia/Darwin',
'TZH:TZM'
)
FROM DUAL;
Resultat:
+09:30
TZ_OFFSET()
Funktion
TZ_OFFSET()
funktion returnerar tidszonsförskjutningen som motsvarar argumentet baserat på datumet då satsen exekveras.
Här är ett exempel på hur du använder TZ_OFFSET()
för att returnera tidszonsförskjutningen baserat på tidszonsregionen som returneras av EXTRACT()
funktion:
SELECT TZ_OFFSET(
EXTRACT(TIMEZONE_REGION FROM TIMESTAMP '2035-09-26 10:30:45 Australia/Darwin')
)
FROM DUAL;
Resultat:
+09:30
Vi kan också skicka SESSIONTIMEZONE
eller DBTIMEZONE
till TZ_OFFSET()
för att returnera tidszonen för vår nuvarande session respektive databas:
SELECT
TZ_OFFSET(SESSIONTIMEZONE) AS "Session",
TZ_OFFSET(DBTIMEZONE) AS "DB"
FROM DUAL;
Resultat:
Session DB __________ _________ +10:00 +00:00