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_HOUR
TIMEZONE_MINUTE
TIMEZONE_REGION
TIMEZONE_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