Databas.Guide
i Oracle-databasen kan tidszoner ställas in på olika platser. Nedan finns fyra sätt att ändra tidszonen när du använder Oracle.
Ställ in databasens tidszon
du kan ställa in databasens tidszon när du skapar databasen. För att göra detta, använd SET TIME_ZONE
– satsen i CREATE DATABASE
– satsen.
exempel:
CREATE DATABASE mySampleDb...SET TIME_ZONE='Australia/Sydney';
i det här fallet använde jag ett tidszonregionsnamn. Se hur du returnerar en lista över giltiga tidszoner i Oracle Database för att få en fullständig lista över giltiga regionnamn på ditt system.
Alternativt kan du använda en faktisk tidszonförskjutning:
CREATE DATABASE mySampleDb...SET TIME_ZONE='+10:00';
om du inte uttryckligen anger tidszonen när du skapar databasen, är den som standard tidszonen för serverns operativsystem.
du kan också ändra den aktuella tidszonsinställningen för databasen. För att göra detta, använd ALTER DATABASE
– satsen.
exempel:
ALTER DATABASE mySampleDb...SET TIME_ZONE='Australia/Sydney';
Observera att databasens tidszon endast är relevant för TIMESTAMP WITH LOCAL TIME ZONE
kolumner. Oracle rekommenderar också att du ställer in databasens tidszon till UTC (0:00) för att undvika datakonvertering och förbättra prestanda när data överförs mellan databaser.
Ställ in sessionens tidszon
du kan ställa in sessionens tidszon oberoende av databasens tidszon. När du returnerar TIMESTAMP WITH LOCAL TIME ZONE
– data returneras den i den aktuella sessionens tidszon.
sessionens tidszon träder också i kraft när ett TIMESTAMP
– värde konverteras till datatypen TIMESTAMP WITH TIME ZONE
eller TIMESTAMP WITH LOCAL TIME ZONE
.
du kan göra ett par saker för att ställa in tidszonen på sessionsnivå.
miljövariabeln ORA_SDTZ
du kan ställa in tidszonen för sessionen med miljövariabeln ORA_SDTZ
. Detta kan ställas in på följande värden:
- operativsystem lokal tidszon (
'OS_TZ'
) - databas tidszon (
'DB_TZ'
) - absolut förskjutning från UTC (t. ex.
'-04:00'
) - Tidszonregionens namn (t. ex.
'America/St_Kitts'
)
här är några exempel på att ställa in denna miljövariabel i en UNIX-miljö:
% setenv ORA_SDTZ 'OS_TZ'% setenv ORA_SDTZ 'DB_TZ'% setenv ORA_SDTZ 'America/St_Kitts'% setenv ORA_SDTZ '-04:00'
standardvärdet för variabeln ORA_SDTZ
är 'OD_TZ'
. Detta värde används när variabeln inte är inställd eller den är inställd på ett ogiltigt värde.
Alter SESSION-satsen
du kan ändra tidszonen för en specifik SQL-session med SET TIME_ZONE
– satsen i ALTER SESSION
– satsen.
TIME_ZONE
kan ställas in på följande värden:
- standard lokal tidszon när sessionen startades (
local
) - databas tidszon (
dbtimezone
) - absolut förskjutning från UTC (t. ex.
'-04:00'
) - Tidszonregionens namn (t. ex.
'Canada/Eastern'
)
här är ett exempel på att ställa in TIME_ZONE
till sådana värden:
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 kontrollera din aktuella sessions tidszon med funktionen SESSIONTIMEZONE
.
exempel:
SELECT SESSIONTIMEZONE FROM DUAL;
resultat:
Australia/Brisbane
i mitt fall är sessionens tidszon inställd på Australien / Brisbane.
at-Tidszonsklausulen
ett datetime-uttryck kan innehålla en AT LOCAL
– klausul eller en AT TIME ZONE
– klausul. Om du inkluderar en AT LOCAL
– sats returneras resultatet i den aktuella sessionens tidszon. Om du inkluderar AT TIME ZONE
– klausulen kan tidszonen vara något av följande:
- en tidszon offset
- en tidszon region namn
-
DBTIMEZONE
(den här funktionen returnerar databasens tidszon) -
SESSIONTIMEZONE
(denna funktion returnerar tidszonen för den aktuella sessionen) - ett uttryck som returnerar en teckensträng med ett giltigt tidszonformat.
exempel:
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 det här fallet använde jag funktionen FROM_TZ()
för att konvertera ett tidsstämpelvärde och en tidszon till ett TIMESTAMP WITH TIME ZONE
värde. Jag använde sedan AT TIME ZONE
– klausulen för att ange en annan tidszon.
här är samma exempel, förutom den här gången anger jag 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