Hieronder staan drie manieren om tijdzone-informatie te retourneren vanuit een datetime-waarde in Oracle Database.
De EXTRACT()
Functie
De EXTRACT(datetime)
functie wordt gebruikt voor het extraheren van verschillende datetime-delen uit een datetime-waarde. Dit omvat de tijdzone-informatie.
Hier is een voorbeeld:
SELECT EXTRACT(
TIMEZONE_REGION FROM TIMESTAMP '2035-09-26 10:30:45 Australia/Darwin'
)
FROM DUAL;
Resultaat:
Australia/Darwin
In dit geval gebruikte ik de TIMEZONE_REGION
argument om de tijdzone te extraheren.
De beschikbare argumenten voor het extraheren van verschillende tijdzone-informatie zijn:
TIMEZONE_HOUR
TIMEZONE_MINUTE
TIMEZONE_REGION
TIMEZONE_ABBR
Het is ook mogelijk om een TIMEZONE_OFFSET
. te gebruiken argument, hoewel dit niet voorkomt in de gedocumenteerde syntaxis van Oracle voor deze functie.
Hier is een voorbeeld van het verkrijgen van de afkorting van de tijdzone:
SELECT
EXTRACT(TIMEZONE_ABBR FROM TIMESTAMP '2035-09-26 10:30:45 Australia/Darwin')
FROM DUAL;
Resultaat:
ACST
Merk op dat, bij gebruik van de bovenstaande tijdzone-argumenten, de datetime-waarde moet resulteren in een expressie van het gegevenstype TIMESTAMP WITH TIME ZONE
of TIMESTAMP WITH LOCAL TIME ZONE
.
De EXTRACT()
functie accepteert ook argumenten voor andere datetime delen, zoals YEAR
, MONTH
, HOUR
, enz.
De TO_CHAR(datetime)
Functie
We kunnen ook de TO_CHAR(datetime)
. gebruiken functioneren als een alternatieve methode om tijdzone-informatie op te halen uit een datetime-waarde.
Deze functie accepteert de datetime- of intervalwaarde als het eerste argument en een formaatmodel als het tweede argument. De functie converteert vervolgens de waarde naar een gegevenstype van VARCHAR2
in het gespecificeerde formaat.
Het formaatmodel specificeert het formaat waarvoor de datetime/intervalwaarde moet worden geretourneerd. Het formaatmodel bestaat uit een of meer formaatelementen. Dit stelt ons in staat om de resultaten zorgvuldig te maken om ons gewenste formaat weer te geven.
Als we alleen tijdzone-informatie willen retourneren, kunnen we een van de formaatelementen voor dat specifieke doel gebruiken.
Er zijn een paar verschillende indelingselementen die we kunnen gebruiken bij het retourneren van tijdzone-informatie van een datetime-waarde.
Laten we beginnen met de TZR
formaatelement:
SELECT TO_CHAR(
TIMESTAMP '2035-09-26 10:30:45 Australia/Darwin',
'TZR'
)
FROM DUAL;
Resultaat:
AUSTRALIA/DARWIN
Dit formaatelement retourneert de tijdzoneregio. Als de datetime-waarde alleen de tijdzone-offset bevat, wordt die in plaats daarvan geretourneerd.
De TZD
format element kan worden gebruikt om informatie over zomertijd terug te geven. Het geeft de tijdzone-informatie terug in een verkorte vorm.
Voorbeeld:
SELECT TO_CHAR(
TIMESTAMP '2035-09-26 10:30:45 Australia/Darwin',
'TZD'
)
FROM DUAL;
Resultaat:
ACST
Als alternatief kunnen we de TZH
. gebruiken en TZM
formaatelementen om de tijdzone-uren en minuten te retourneren, gebaseerd op de tijdzone-offset.
SELECT TO_CHAR(
TIMESTAMP '2035-09-26 10:30:45 Australia/Darwin',
'TZH:TZM'
)
FROM DUAL;
Resultaat:
+09:30
De TZ_OFFSET()
Functie
De TZ_OFFSET()
functie retourneert de tijdzone-offset die overeenkomt met het argument op basis van de datum waarop de instructie is uitgevoerd.
Hier is een voorbeeld van het gebruik van TZ_OFFSET()
om de tijdzone-offset terug te geven op basis van de tijdzoneregio geretourneerd door de EXTRACT()
functie:
SELECT TZ_OFFSET(
EXTRACT(TIMEZONE_REGION FROM TIMESTAMP '2035-09-26 10:30:45 Australia/Darwin')
)
FROM DUAL;
Resultaat:
+09:30
We kunnen ook SESSIONTIMEZONE
doorgeven of DBTIMEZONE
naar TZ_OFFSET()
om respectievelijk de tijdzone van onze huidige sessie en database terug te geven:
SELECT
TZ_OFFSET(SESSIONTIMEZONE) AS "Session",
TZ_OFFSET(DBTIMEZONE) AS "DB"
FROM DUAL;
Resultaat:
Session DB __________ _________ +10:00 +00:00