Database.Guide
i Oracle Database kan tidsområder indstilles forskellige steder. Nedenfor er fire måder at ændre tidsområdet på, når du bruger Oracle.
Indstil Databasetidsområdet
du kan indstille databasetidsområdet, når du opretter databasen. For at gøre dette skal du bruge SET TIME_ZONE
– klausulen i CREATE DATABASE
– erklæringen.
eksempel:
CREATE DATABASE mySampleDb...SET TIME_ZONE='Australia/Sydney';
i dette tilfælde brugte jeg et tidsområde region navn. Se Sådan returneres en liste over gyldige tidsområder i Oracle Database for at få en komplet liste over gyldige regionnavne på dit system.
Alternativt kan du bruge en faktisk tidsforskydning:
CREATE DATABASE mySampleDb...SET TIME_ZONE='+10:00';
hvis du ikke eksplicit indstiller tidsområdet, når du opretter databasen, er det som standard tidsområdet for serverens operativsystem.
du kan også ændre den aktuelle klokkeslætsindstilling for databasen. For at gøre dette skal du bruge ALTER DATABASE
– erklæringen.
eksempel:
ALTER DATABASE mySampleDb...SET TIME_ZONE='Australia/Sydney';
bemærk, at databasetidsområdet kun er relevant for TIMESTAMP WITH LOCAL TIME ZONE
kolonner. Oracle anbefaler også, at du indstiller databasetidsområdet til UTC (0:00) for at undgå datakonvertering og forbedre ydeevnen, når data overføres mellem databaser.
Indstil Sessionstidsområdet
du kan indstille sessionstidsområdet uafhængigt af databasetidsområdet. Når du returnerer TIMESTAMP WITH LOCAL TIME ZONE
data, returneres de i den aktuelle sessions tidsområde.
sessionstidsområdet træder også i kraft, når en TIMESTAMP
værdi konverteres til datatypen TIMESTAMP WITH TIME ZONE
eller TIMESTAMP WITH LOCAL TIME ZONE
.
du kan gøre et par ting for at indstille tidsområdet på sessionsniveau.
miljøvariablen
du kan indstille sessionstidsområdet med miljøvariablen ORA_SDTZ
. Dette kan indstilles til følgende værdier:
- operativsystem lokal tidsområde (
'OS_TZ'
) - Database tidsområde (
'DB_TZ'
) - absolut forskydning fra UTC (f. eks.
'-04:00'
) - navn på Tidsområde (f. eks.
'America/St_Kitts'
)
her er nogle eksempler på at indstille denne miljøvariabel i et unikt miljø:
% setenv ORA_SDTZ 'OS_TZ'% setenv ORA_SDTZ 'DB_TZ'% setenv ORA_SDTZ 'America/St_Kitts'% setenv ORA_SDTZ '-04:00'
standardværdien af variablen ORA_SDTZ
er 'OD_TZ'
. Denne værdi bruges, når variablen ikke er indstillet, eller den er indstillet til en ugyldig værdi.
sætningen ALTER SESSION
du kan ændre tidsområdet for en bestemt session med klausulen SET TIME_ZONE
i sætningen ALTER SESSION
.
TIME_ZONE
kan indstilles til følgende værdier:
- standard lokal tidsområde, da sessionen blev startet (
local
) - Database tidsområde (
dbtimezone
) - absolut forskydning fra UTC (f. eks.
'-04:00'
) - navn på Tidsområde (f. eks.
'Canada/Eastern'
)
her er et eksempel på at indstille TIME_ZONE
til sådanne værdier:
ALTER SESSION SET TIME_ZONE=local;ALTER SESSION SET TIME_ZONE=dbtimezone;ALTER SESSION SET TIME_ZONE='Canada/Eastern';ALTER SESSION SET TIME_ZONE='-04:00';
du kan kontrollere din aktuelle sessions tidsområde med funktionen SESSIONTIMEZONE
.
eksempel:
SELECT SESSIONTIMEZONE FROM DUAL;
resultat:
Australia/Brisbane
i mit tilfælde er sessionstidsområdet indstillet til Australien / Brisbane.
at-TIDSKLAUSULEN
et datetime-udtryk kan indeholde en AT LOCAL
– klausul eller en AT TIME ZONE
– klausul. Hvis du inkluderer en AT LOCAL
– klausul, returneres resultatet i det aktuelle sessionstidsområde. Hvis du inkluderer AT TIME ZONE
– klausulen, kan tidsområdet være et af følgende:
- en tidsområdeforskydning
- et tidsområdes områdenavn
-
DBTIMEZONE
(denne funktion returnerer tidsområdet for databasen) -
SESSIONTIMEZONE
(denne funktion returnerer tidsområdet for den aktuelle session) - et udtryk, der returnerer en tegnstreng med et gyldigt tidsområdeformat.
eksempel:
SELECT FROM_TZ(TIMESTAMP '2030-01-01 12:30:35', '-04:00') AT TIME ZONE '+12:00'FROM DUAL;
resultat:
02/JAN/30 04:30:35.000000000 AM +12:00
i dette tilfælde brugte jeg funktionen FROM_TZ()
til at konvertere en tidsstempelværdi og en tidssone til en TIMESTAMP WITH TIME ZONE
værdi. Jeg brugte derefter AT TIME ZONE
klausulen til at angive et andet tidsområde.
her er det samme eksempel, undtagen denne gang angiver jeg AT LOCAL
:
SELECT FROM_TZ(TIMESTAMP '2030-01-01 12:30:35', '-04:00') AT LOCALFROM DUAL;
resultat:
02/JAN/30 02:30:35.000000000 AM AUSTRALIA/BRISBANE