sql >> Databáze >  >> RDS >> Oracle

4 způsoby, jak změnit časové pásmo v Oracle

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.

Nastavte časové pásmo databáze

Časové pásmo databáze můžete nastavit při vytváření databáze. Chcete-li to provést, použijte SET TIME_ZONE klauzule CREATE DATABASE prohlášení.

Příklad:

CREATE DATABASE mySampleDb
...
SET TIME_ZONE='Australia/Sydney';

V tomto případě jsem použil název oblasti časového pásma. Úplný seznam platných názvů oblastí ve vašem systému naleznete v části Jak vrátit seznam platných časových pásem v databázi Oracle.

Případně 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, použije se jako výchozí časové pásmo operačního systému serveru.

Můžete také změnit aktuální nastavení časového pásma pro databázi. K tomu použijte ALTER DATABASE prohlášení.

Příklad:

ALTER DATABASE mySampleDb
...
SET TIME_ZONE='Australia/Sydney';

Upozorňujeme, že časové pásmo databáze je relevantní pouze pro TIMESTAMP WITH LOCAL TIME ZONE sloupců. Společnost Oracle také doporučuje nastavit časové pásmo databáze na UTC (0:00), abyste zabránili konverzi dat a zlepšili 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ém pásmu 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 projeví také při TIMESTAMP hodnota se převede na TIMESTAMP WITH TIME ZONE nebo TIMESTAMP WITH LOCAL TIME ZONE datový typ.

Chcete-li nastavit časové pásmo na úrovni relace, můžete provést několik věcí.

The ORA_SDTZ Proměnná prostředí

Časové pásmo relace můžete nastavit pomocí ORA_SDTZ proměnná prostředí. To lze nastavit na následující hodnoty:

  • Místní časové pásmo operačního systému ('OS_TZ' )
  • Časové pásmo databáze ('DB_TZ' )
  • Absolutní odchylka 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 ORA_SDTZ proměnná je 'OD_TZ' . Tato hodnota se používá, když proměnná není nastavena nebo je nastavena na neplatnou hodnotu.

ALTER SESSION Prohlášení

Časové pásmo pro konkrétní relaci SQL můžete změnit pomocí SET TIME_ZONE klauzule ALTER SESSION prohlášení.

TIME_ZONE lze nastavit na následující hodnoty:

  • Výchozí místní časové pásmo při zahájení relace (local )
  • Časové pásmo databáze (dbtimezone )
  • Absolutní odchylka 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';

Časové pásmo aktuální relace můžete zkontrolovat pomocí SESSIONTIMEZONE funkce.

Příklad:

SELECT SESSIONTIMEZONE FROM DUAL;

Výsledek:

Australia/Brisbane 

V mém případě je časové pásmo relace nastaveno na Austrálie/Brisbane.

AT TIME ZONE Ustanovení

Výraz datum a čas může obsahovat AT LOCAL klauzule nebo AT TIME ZONE doložka. Pokud zahrnete AT LOCAL klauzule, pak je výsledek vrácen v aktuálním časovém pásmu relace. Pokud zahrnete AT TIME ZONE klauzule, pak může být časové pásmo jedno 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 FROM_TZ() funkce pro převod hodnoty časového razítka a časového pásma na TIMESTAMP WITH TIME ZONE hodnota. Potom jsem použil AT TIME ZONE klauzule k určení jiného časového pásma.

Zde je stejný příklad, ale tentokrát uvádím AT LOCAL :

SELECT 
    FROM_TZ(TIMESTAMP '2030-01-01 12:30:35', '-04:00') 
    AT LOCAL
FROM DUAL;

Výsledek:

02/JAN/30 02:30:35.000000000 AM AUSTRALIA/BRISBANE

  1. Jak opravit chybu Msg 7325 na serveru SQL Server:„Objekty odhalující sloupce s typy CLR nejsou povoleny v distribuovaných dotazech“

  2. PostgreSQL je nejlepší databáze na světě

  3. Jak vygenerovat náhodné celé číslo v rozsahu v MariaDB

  4. Typy tabulkových vztahů v MS Access