V MariaDB, CONVERT_TZ()
je vestavěná funkce data a času, která převádí hodnotu data a času z jednoho časového pásma do druhého.
Když funkci zavoláte, předáte tři argumenty:čas, časové pásmo, ze kterého se má převést, ze a časové pásmo, které se má převést na .
Syntaxe
Syntaxe vypadá takto:
CONVERT_TZ(dt,from_tz,to_tz)
Kde dt
je výraz datum a čas, from_tz
je časové pásmo, z kterého se má převést z a to_tz
je časové pásmo, které se má převést na .
Příklad
Zde je příklad:
SELECT CONVERT_TZ('2021-05-10 01:00:00', '+00:00', '+10:00');
Výsledek:
+-------------------------------------------------------+ | CONVERT_TZ('2021-05-10 01:00:00', '+00:00', '+10:00') | +-------------------------------------------------------+ | 2021-05-10 11:00:00 | +-------------------------------------------------------+
Zde je původní časové pásmo +00:00 a my jsme ho převedli na +10:00.
Pokud použijeme jiné počáteční časové pásmo, stane se toto:
SELECT CONVERT_TZ('2021-05-10 01:00:00', '+03:00', '+10:00');
Výsledek:
+-------------------------------------------------------+ | CONVERT_TZ('2021-05-10 01:00:00', '+03:00', '+10:00') | +-------------------------------------------------------+ | 2021-05-10 08:00:00 | +-------------------------------------------------------+
Pojmenovaná časová pásma
Lze použít pojmenovaná časová pásma, ale to vyžaduje, aby byly načteny různé tabulky časových pásem.
Co se stane, když tabulky časových pásem nejsou obsazeno:
SELECT
CONVERT_TZ('2021-05-10 01:00:00', 'GMT', 'Pacific/Chatham');
Výsledek:
+-------------------------------------------------------------+ | CONVERT_TZ('2021-05-10 01:00:00', 'GMT', 'Pacific/Chatham') | +-------------------------------------------------------------+ | NULL | +-------------------------------------------------------------+
Výsledek je null
, protože v tabulkách časových pásem nejsou žádné údaje o časovém pásmu.
Zde je znovu stejný dotaz, ale tentokrát s údaji v tabulkách časových pásem:
SELECT
CONVERT_TZ('2021-05-10 01:00:00', 'GMT', 'Pacific/Chatham');
Výsledek:
+-------------------------------------------------------------+ | CONVERT_TZ('2021-05-10 01:00:00', 'GMT', 'Pacific/Chatham') | +-------------------------------------------------------------+ | 2021-05-10 13:45:00 | +-------------------------------------------------------------+
Hodnoty data a času mimo rozsah
Pokud hodnota spadá mimo podporované TIMESTAMP
, neproběhne konverze rozsah ('1970-01-01 00:00:01'
do '2038-01-19 05:14:07'
UTC) při převodu z from_tz
do UTC.
Příklad:
SELECT CONVERT_TZ('2040-05-10 01:00:00', '+00:00', '+10:00');
Výsledek:
+-------------------------------------------------------+ | CONVERT_TZ('2040-05-10 01:00:00', '+00:00', '+10:00') | +-------------------------------------------------------+ | 2040-05-10 01:00:00 | +-------------------------------------------------------+
Neplatné argumenty
Pokud je některý z argumentů neplatný, CONVERT_TZ()
vrátí null
.
Příklad:
SELECT CONVERT_TZ('2040-05-10 01:00:00', '+00:00', '+90:00');
Výsledek:
+-------------------------------------------------------+ | CONVERT_TZ('2040-05-10 01:00:00', '+00:00', '+90:00') | +-------------------------------------------------------+ | NULL | +-------------------------------------------------------+
V tomto případě jsem se pokusil převést výraz datetime na neplatné časové pásmo (+90:00
), a tak null
byl vrácen.
Nulové argumenty
Pokud je některý argument null
, výsledkem je null
:
SELECT
CONVERT_TZ(null, '+00:00', '+90:00') AS "1",
CONVERT_TZ('2021-05-10 01:00:00', null, '+90:00') AS "2",
CONVERT_TZ('2021-05-10 01:00:00', '+00:00', null) AS "3";
Výsledek:
+------+------+------+ | 1 | 2 | 3 | +------+------+------+ | NULL | NULL | NULL | +------+------+------+
Chybí argument
Volání CONVERT_TZ()
s nesprávným počtem argumentů nebo bez předání jakýchkoli argumentů vede k chybě:
SELECT CONVERT_TZ();
Výsledek:
ERROR 1582 (42000): Incorrect parameter count in the call to native function 'CONVERT_TZ'