Níže jsou uvedeny tři způsoby, jak vrátit informace o časovém pásmu z hodnoty datetime v databázi Oracle.
EXTRACT() Funkce
EXTRACT(datetime) Funkce se používá k extrahování různých částí data a času z hodnoty datetime. To zahrnuje informace o časovém pásmu.
Zde je příklad:
SELECT EXTRACT(
TIMEZONE_REGION FROM TIMESTAMP '2035-09-26 10:30:45 Australia/Darwin'
)
FROM DUAL; Výsledek:
Australia/Darwin
V tomto případě jsem použil TIMEZONE_REGION argument pro extrahování oblasti časového pásma.
Dostupné argumenty pro extrahování různých informací o časovém pásmu jsou:
TIMEZONE_HOURTIMEZONE_MINUTETIMEZONE_REGIONTIMEZONE_ABBR
Je také možné použít TIMEZONE_OFFSET argument, i když se to neobjevuje v dokumentované syntaxi Oracle pro tuto funkci.
Zde je příklad získání zkratky časového pásma:
SELECT
EXTRACT(TIMEZONE_ABBR FROM TIMESTAMP '2035-09-26 10:30:45 Australia/Darwin')
FROM DUAL; Výsledek:
ACST
Pamatujte, že při použití výše uvedených argumentů časového pásma se hodnota datetime musí vyhodnotit jako výraz datového typu TIMESTAMP WITH TIME ZONE nebo TIMESTAMP WITH LOCAL TIME ZONE .
EXTRACT() funkce také přijímá argumenty pro další části data a času, jako je YEAR , MONTH , HOUR , atd.
TO_CHAR(datetime) Funkce
Můžeme také použít TO_CHAR(datetime) fungovat jako alternativní metoda k získání informací o časovém pásmu z hodnoty datetime.
Tato funkce přijímá jako svůj první argument hodnotu datetime nebo interval a jako druhý argument model formátu. Funkce pak převede hodnotu na datový typ VARCHAR2 v zadaném formátu.
Model formátu určuje formát, pro který má být vrácena hodnota datetime/interval. Model formátu se skládá z jednoho nebo více prvků formátu. To nám umožňuje pečlivě vytvářet výsledky tak, aby odrážely náš požadovaný formát.
Pokud chceme vrátit pouze informace o časovém pásmu, můžeme pro tento konkrétní účel použít jeden z prvků formátu.
Existuje několik různých prvků formátu, které můžeme použít při vracení informací o časovém pásmu z hodnoty datetime.
Začněme s TZR prvek formátu:
SELECT TO_CHAR(
TIMESTAMP '2035-09-26 10:30:45 Australia/Darwin',
'TZR'
)
FROM DUAL; Výsledek:
AUSTRALIA/DARWIN
Tento prvek formátu vrací oblast časového pásma. Pokud hodnota datetime obsahuje pouze posun časového pásma, je místo toho vráceno.
TZD formátovací prvek lze použít k vrácení informací o letních měsících. Vrací informace o časovém pásmu ve zkrácené podobě.
Příklad:
SELECT TO_CHAR(
TIMESTAMP '2035-09-26 10:30:45 Australia/Darwin',
'TZD'
)
FROM DUAL; Výsledek:
ACST
Případně můžeme použít TZH a TZM formátovat prvky tak, aby vracely hodiny a minuty časového pásma na základě posunu časového pásma.
SELECT TO_CHAR(
TIMESTAMP '2035-09-26 10:30:45 Australia/Darwin',
'TZH:TZM'
)
FROM DUAL; Výsledek:
+09:30
Položka TZ_OFFSET() Funkce
TZ_OFFSET() funkce vrací posun časové zóny odpovídající argumentu na základě data provedení příkazu.
Zde je příklad použití TZ_OFFSET() vrátit posun časového pásma na základě regionu časového pásma vráceného funkcí EXTRACT() funkce:
SELECT TZ_OFFSET(
EXTRACT(TIMEZONE_REGION FROM TIMESTAMP '2035-09-26 10:30:45 Australia/Darwin')
)
FROM DUAL; Výsledek:
+09:30
Můžeme také předat SESSIONTIMEZONE nebo DBTIMEZONE na TZ_OFFSET() vrátit časové pásmo naší aktuální relace a databáze:
SELECT
TZ_OFFSET(SESSIONTIMEZONE) AS "Session",
TZ_OFFSET(DBTIMEZONE) AS "DB"
FROM DUAL; Výsledek:
Session DB __________ _________ +10:00 +00:00