Database.Guide
I Oracle Database kan tidssoner settes på forskjellige steder. Nedenfor er fire måter å endre tidssonen når Du bruker Oracle.
Angi Tidssonen For Databasen
du kan angi tidssonen for databasen når du oppretter databasen. For å gjøre dette, bruk SET TIME_ZONE
– klausulen i CREATE DATABASE
– setningen.
Eksempel:
CREATE DATABASE mySampleDb...SET TIME_ZONE='Australia/Sydney';
I dette tilfellet brukte jeg et tidssone region navn. Se Hvordan Du Returnerer En Liste Over Gyldige Tidssoner I Oracle Database for å få en fullstendig liste over gyldige regionnavn på systemet.
Alternativt kan du bruke en faktisk tidssoneforskyvning:
CREATE DATABASE mySampleDb...SET TIME_ZONE='+10:00';
hvis du ikke eksplisitt angir tidssonen når du oppretter databasen, er den som standard til tidssonen til serverens operativsystem.
du kan også endre gjeldende tidssoneinnstilling for databasen. For å gjøre dette, bruk ALTER DATABASE
– setningen.
Eksempel:
ALTER DATABASE mySampleDb...SET TIME_ZONE='Australia/Sydney';
Vær oppmerksom på at databasen tidssone er relevant bare for TIMESTAMP WITH LOCAL TIME ZONE
kolonner. Oracle anbefaler Også at du angir tidssonen for databasen TIL UTC (0:00) for å unngå datakonvertering og forbedre ytelsen når data overføres mellom databaser.
Angi Tidssonen For Økt
du kan angi tidssonen for økt uavhengig av databasens tidssone. Når du returnerer TIMESTAMP WITH LOCAL TIME ZONE
– data, returneres de i tidssonen for gjeldende økt.
økttidssonen trer også i kraft når en TIMESTAMP
– verdi konverteres til datatypen TIMESTAMP WITH TIME ZONE
eller TIMESTAMP WITH LOCAL TIME ZONE
.
du kan gjøre et par ting for å angi tidssonen på øktnivået.
Miljøvariabelen Ora_sdtz
du kan angi tidssonen for økt med miljøvariabelen ORA_SDTZ
. Dette kan settes til følgende verdier:
- Operativsystem lokal tidssone (
'OS_TZ'
) - Database tidssone (
'DB_TZ'
) - Absolutt offset fra UTC (f. eks.
'-04:00'
) - tidssone regionnavn (f. eks.
'America/St_Kitts'
)
her er noen eksempler på å angi denne miljøvariabelen I ET UNIX-miljø:
% setenv ORA_SDTZ 'OS_TZ'% setenv ORA_SDTZ 'DB_TZ'% setenv ORA_SDTZ 'America/St_Kitts'% setenv ORA_SDTZ '-04:00'
standardverdien for variabelen ORA_SDTZ
er 'OD_TZ'
. Denne verdien brukes når variabelen ikke er angitt eller den er satt til en ugyldig verdi.
ALTER SESSION-Setningen
du kan endre tidssonen for en BESTEMT SQL-økt med SET TIME_ZONE
– setningen i ALTER SESSION
– setningen.
TIME_ZONE
kan settes til følgende verdier:
- Standard lokal tidssone når økten ble startet (
local
) - Database tidssone (
dbtimezone
) - Absolutt offset fra UTC (f. eks.
'-04:00'
) - tidssone regionnavn (f. eks.
'Canada/Eastern'
)
Her er et eksempel på å sette TIME_ZONE
til slike verdier:
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 sjekke tidssonen for gjeldende økt med SESSIONTIMEZONE
– funksjonen.
Eksempel:
SELECT SESSIONTIMEZONE FROM DUAL;
Resultat:
Australia/Brisbane
i mitt tilfelle er økttidssonen satt Til Australia / Brisbane.
KLAUSULEN VED TIDSSONE
et datetime-uttrykk kan inneholde en AT LOCAL
– klausul eller en AT TIME ZONE
– klausul. Hvis du inkluderer en AT LOCAL
– setning, returneres resultatet i gjeldende økttidssone. Hvis du inkluderer AT TIME ZONE
– setningen, kan tidssonen være ett av følgende:
- en tidssone forskyvning
- en tidssone region navn
-
DBTIMEZONE
(denne funksjonen returnerer tidssonen til databasen) -
SESSIONTIMEZONE
(denne funksjonen returnerer tidssonen for gjeldende økt) - et uttrykk som returnerer en tegnstreng med et gyldig tidssoneformat.
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 tilfellet brukte jeg funksjonen FROM_TZ()
til å konvertere en tidsstempelverdi og en tidssone til en TIMESTAMP WITH TIME ZONE
– verdi. Jeg brukte da AT TIME ZONE
– klausulen for å angi en annen tidssone.
Her er det samme eksemplet, bortsett fra denne gangen angir 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