Databáze.Průvodce
v databázi Oracle lze časová pásma nastavit na různých místech. Níže jsou uvedeny čtyři způsoby, jak změnit Časové pásmo při používání Oracle.
nastavení časového pásma databáze
Časové pásmo databáze můžete nastavit při vytváření databáze. Chcete-li to provést, použijte klauzuli SET TIME_ZONE
příkazu CREATE DATABASE
.
příklad:
CREATE DATABASE mySampleDb...SET TIME_ZONE='Australia/Sydney';
v tomto případě jsem použil název oblasti časového pásma. Podívejte se, jak vrátit seznam platných časových pásem v databázi Oracle a získat úplný seznam platných názvů oblastí ve vašem systému.
Alternativně můžete použít skutečný posun časového pásma:
CREATE DATABASE mySampleDb...SET TIME_ZONE='+10:00';
pokud při vytváření databáze explicitně nenastavíte Časové pásmo, výchozí je Časové pásmo operačního systému serveru.
můžete také změnit nastavení aktuálního časového pásma pro databázi. Chcete-li to provést, použijte příkaz ALTER DATABASE
.
příklad:
ALTER DATABASE mySampleDb...SET TIME_ZONE='Australia/Sydney';
Všimněte si, že Časové pásmo databáze je relevantní pouze pro sloupce TIMESTAMP WITH LOCAL TIME ZONE
. Oracle také doporučuje nastavit časové pásmo databáze na UTC (0:00) zabránit konverzi dat a zlepšit výkon při přenosu dat mezi databázemi.
Nastavte časové pásmo relace
Časové pásmo relace můžete nastavit nezávisle na Časové pásmo databáze. Když vrátíte TIMESTAMP WITH LOCAL TIME ZONE
data, vrátí se v časovém pásmu aktuální relace.
Časové pásmo relace se také projeví, když je hodnota TIMESTAMP
převedena na datový typ TIMESTAMP WITH TIME ZONE
nebo TIMESTAMP WITH LOCAL TIME ZONE
.
můžete udělat několik věcí pro nastavení časového pásma na úrovni relace.
proměnná prostředí Ora_sdtz
můžete nastavit časové pásmo relace pomocí proměnné prostředí ORA_SDTZ
. To lze nastavit na následující hodnoty:
- operační systém místní Časové pásmo (
'OS_TZ'
) - Časové pásmo databáze (
'DB_TZ'
) - absolutní posun od UTC (např.
'-04:00'
) - název oblasti časového pásma (např.
'America/St_Kitts'
)
zde je několik příkladů nastavení této proměnné prostředí v prostředí UNIX:
% setenv ORA_SDTZ 'OS_TZ'% setenv ORA_SDTZ 'DB_TZ'% setenv ORA_SDTZ 'America/St_Kitts'% setenv ORA_SDTZ '-04:00'
výchozí hodnota proměnné ORA_SDTZ
je 'OD_TZ'
. Tato hodnota se používá, pokud proměnná není nastavena nebo je nastavena na neplatnou hodnotu.
příkaz ALTER SESSION
můžete změnit Časové pásmo pro konkrétní relaci SQL pomocí klauzule SET TIME_ZONE
příkazu ALTER SESSION
.
TIME_ZONE
lze nastavit na následující hodnoty:
- výchozí místní Časové pásmo při spuštění relace(
local
) - Časové pásmo databáze (
dbtimezone
) - absolutní posun od UTC (např.
'-04:00'
) - název oblasti časového pásma (např.
'Canada/Eastern'
)
zde je příklad nastavení TIME_ZONE
na tyto hodnoty:
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';
můžete zkontrolovat Časové pásmo vaší aktuální relace pomocí funkce SESSIONTIMEZONE
.
příklad:
SELECT SESSIONTIMEZONE FROM DUAL;
výsledek:
Australia/Brisbane
v mém případě je Časové pásmo relace nastaveno na Austrálii / Brisbane.
klauzule v časovém pásmu
výraz datetime může obsahovat klauzuli AT LOCAL
nebo klauzuli AT TIME ZONE
. Pokud zahrnete klauzuli AT LOCAL
, výsledek se vrátí v aktuálním časovém pásmu relace. Pokud zahrnete klauzuli AT TIME ZONE
, může být Časové pásmo jedním z následujících:
- posun časového pásma
- název oblasti časového pásma
-
DBTIMEZONE
(tato funkce vrací Časové pásmo databáze) -
SESSIONTIMEZONE
(tato funkce vrací Časové pásmo aktuální relace) - výraz, který vrací řetězec znaků s platným formátem časového pásma.
příklad:
SELECT FROM_TZ(TIMESTAMP '2030-01-01 12:30:35', '-04:00') AT TIME ZONE '+12:00'FROM DUAL;
výsledek:
02/JAN/30 04:30:35.000000000 AM +12:00
v tomto případě jsem použil funkci FROM_TZ()
k převodu hodnoty časového razítka a časového pásma na hodnotu TIMESTAMP WITH TIME ZONE
. Potom jsem použil klauzuli AT TIME ZONE
k určení jiného časového pásma.
zde je stejný příklad, kromě této doby specifikuji AT LOCAL
:
SELECT FROM_TZ(TIMESTAMP '2030-01-01 12:30:35', '-04:00') AT LOCALFROM DUAL;
výsledek:
02/JAN/30 02:30:35.000000000 AM AUSTRALIA/BRISBANE