Nedenfor er tre måder, hvorpå du kan returnere tidszoneoplysninger fra en datetime-værdi i Oracle Database.
EXTRACT()
Funktion
EXTRACT(datetime)
funktion bruges til at udtrække forskellige datetime dele fra en datetime værdi. Dette inkluderer tidszoneoplysningerne.
Her er et eksempel:
SELECT EXTRACT(
TIMEZONE_REGION FROM TIMESTAMP '2035-09-26 10:30:45 Australia/Darwin'
)
FROM DUAL;
Resultat:
Australia/Darwin
I dette tilfælde brugte jeg TIMEZONE_REGION
argument for at udtrække tidszoneområdet.
De tilgængelige argumenter for at udtrække forskellige tidszoneoplysninger er:
TIMEZONE_HOUR
TIMEZONE_MINUTE
TIMEZONE_REGION
TIMEZONE_ABBR
Det er også muligt at bruge en TIMEZONE_OFFSET
argument, selvom dette ikke vises i Oracles dokumenterede syntaks for denne funktion.
Her er et eksempel på at få tidszoneforkortelsen:
SELECT
EXTRACT(TIMEZONE_ABBR FROM TIMESTAMP '2035-09-26 10:30:45 Australia/Darwin')
FROM DUAL;
Resultat:
ACST
Bemærk, at når du bruger ovenstående tidszoneargumenter, skal datetime-værdien evalueres til et udtryk af datatypen TIMESTAMP WITH TIME ZONE
eller TIMESTAMP WITH LOCAL TIME ZONE
.
EXTRACT()
funktion accepterer også argumenter for andre datetime dele, såsom YEAR
, MONTH
, HOUR
osv.
TO_CHAR(datetime)
Funktion
Vi kan også bruge TO_CHAR(datetime)
fungere som en alternativ metode til at få tidszoneoplysninger fra en datetime-værdi.
Denne funktion accepterer datetime eller intervalværdien som sit første argument og en formatmodel som sit andet argument. Funktionen konverterer derefter værdien til en datatype VARCHAR2
i det angivne format.
Formatmodellen angiver det format, som dato/intervalværdien skal returneres for. Formatmodellen består af et eller flere formatelementer. Dette gør os i stand til omhyggeligt at udforme resultaterne, så de afspejler vores ønskede format.
Hvis vi kun ønsker at returnere tidszoneoplysninger, kan vi bruge et af formatelementerne til det specifikke formål.
Der er et par forskellige formatelementer, som vi kan bruge, når vi returnerer tidszoneoplysninger fra en datetime-værdi.
Lad os starte med TZR
formatelement:
SELECT TO_CHAR(
TIMESTAMP '2035-09-26 10:30:45 Australia/Darwin',
'TZR'
)
FROM DUAL;
Resultat:
AUSTRALIA/DARWIN
Dette formatelement returnerer tidszoneområdet. Hvis datetime-værdien kun inkluderer tidszoneforskydningen, returneres det i stedet.
TZD
formatelement kan bruges til at returnere sommertid. Det returnerer tidszoneoplysningerne i en forkortet form.
Eksempel:
SELECT TO_CHAR(
TIMESTAMP '2035-09-26 10:30:45 Australia/Darwin',
'TZD'
)
FROM DUAL;
Resultat:
ACST
Alternativt kan vi bruge TZH
og TZM
formater elementer for at returnere tidszonens timer og minutter, baseret på tidszoneforskydningen.
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 returnerer den tidszoneforskydning, der svarer til argumentet baseret på den dato, sætningen udføres.
Her er et eksempel på brug af TZ_OFFSET()
for at returnere tidszoneforskydningen baseret på tidszoneregionen returneret af 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 også sende SESSIONTIMEZONE
eller DBTIMEZONE
til TZ_OFFSET()
for at returnere tidszonen for henholdsvis vores aktuelle session og database:
SELECT
TZ_OFFSET(SESSIONTIMEZONE) AS "Session",
TZ_OFFSET(DBTIMEZONE) AS "DB"
FROM DUAL;
Resultat:
Session DB __________ _________ +10:00 +00:00