sql >> Databáze >  >> RDS >> MariaDB

Jak funguje CONVERT_TZ() v MariaDB

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'

  1. Jak předat parametr s hodnotou tabulky z C# do uložené procedury Oracle

  2. Jak importuji soubor .sql do databáze mysql pomocí PHP?

  3. Jak vytvořit VARRAY jako člena bloku PL/SQL v databázi Oracle

  4. Escape znak v SQL Server