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_SDTZer '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

Leave a Reply

Din e-mailadresse vil ikke blive publiceret.