MariaDB
 sql >> Database >  >> RDS >> MariaDB

Come funziona CONVERT_TZ() in MariaDB

In MariaDB, CONVERT_TZ() è una funzione di data e ora incorporata che converte un valore datetime da un fuso orario a un altro.

Quando chiami la funzione, passi tre argomenti:l'ora, il fuso orario da cui convertire da e il fuso orario in cui convertire in .

Sintassi

La sintassi è questa:

CONVERT_TZ(dt,from_tz,to_tz)

Dove dt è l'espressione datetime, from_tz è il fuso orario da cui convertire da e to_tz è il fuso orario in cui convertire in .

Esempio

Ecco un esempio:

SELECT CONVERT_TZ('2021-05-10 01:00:00', '+00:00', '+10:00');

Risultato:

+-------------------------------------------------------+
| CONVERT_TZ('2021-05-10 01:00:00', '+00:00', '+10:00') |
+-------------------------------------------------------+
| 2021-05-10 11:00:00                                   |
+-------------------------------------------------------+

Qui, il fuso orario originale è +00:00 e lo abbiamo convertito in +10:00.

Ecco cosa succede se utilizziamo un fuso orario di inizio diverso:

SELECT CONVERT_TZ('2021-05-10 01:00:00', '+03:00', '+10:00');

Risultato:

+-------------------------------------------------------+
| CONVERT_TZ('2021-05-10 01:00:00', '+03:00', '+10:00') |
+-------------------------------------------------------+
| 2021-05-10 08:00:00                                   |
+-------------------------------------------------------+

Fuso orario denominato

È possibile utilizzare fusi orari con nome, ma ciò richiede che le varie tabelle di fusi orari siano state caricate.

Ecco cosa succede quando le tabelle dei fusi orari non sono popolato:

SELECT 
CONVERT_TZ('2021-05-10 01:00:00', 'GMT', 'Pacific/Chatham');

Risultato:

+-------------------------------------------------------------+
| CONVERT_TZ('2021-05-10 01:00:00', 'GMT', 'Pacific/Chatham') |
+-------------------------------------------------------------+
| NULL                                                        |
+-------------------------------------------------------------+

Il risultato è null , perché nelle tabelle dei fusi orari non sono presenti dati sul fuso orario.

Ecco di nuovo la stessa query, ma questa volta con i dati nelle tabelle dei fusi orari:

SELECT 
CONVERT_TZ('2021-05-10 01:00:00', 'GMT', 'Pacific/Chatham');

Risultato:

+-------------------------------------------------------------+
| CONVERT_TZ('2021-05-10 01:00:00', 'GMT', 'Pacific/Chatham') |
+-------------------------------------------------------------+
| 2021-05-10 13:45:00                                         |
+-------------------------------------------------------------+

Valori di data e ora fuori intervallo

Non avverrà alcuna conversione se il valore non rientra nel TIMESTAMP supportato intervallo ('1970-01-01 00:00:01' a '2038-01-19 05:14:07' UTC) se convertito da from_tz all'ora UTC.

Esempio:

SELECT CONVERT_TZ('2040-05-10 01:00:00', '+00:00', '+10:00');

Risultato:

+-------------------------------------------------------+
| CONVERT_TZ('2040-05-10 01:00:00', '+00:00', '+10:00') |
+-------------------------------------------------------+
| 2040-05-10 01:00:00                                   |
+-------------------------------------------------------+

Argomenti non validi

Se uno qualsiasi degli argomenti non è valido, CONVERT_TZ() restituisce null .

Esempio:

SELECT CONVERT_TZ('2040-05-10 01:00:00', '+00:00', '+90:00');

Risultato:

+-------------------------------------------------------+
| CONVERT_TZ('2040-05-10 01:00:00', '+00:00', '+90:00') |
+-------------------------------------------------------+
| NULL                                                  |
+-------------------------------------------------------+

In questo caso, ho provato a convertire l'espressione datetime in un fuso orario non valido (+90:00 ), e così null è stato restituito.

Argomenti nulli

Se un argomento è null , il risultato è 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";

Risultato:

+------+------+------+
| 1    | 2    | 3    |
+------+------+------+
| NULL | NULL | NULL |
+------+------+------+

Argomento mancante

Chiamando CONVERT_TZ() con il numero errato di argomenti o senza passare alcun argomento genera un errore:

SELECT CONVERT_TZ();

Risultato:

ERROR 1582 (42000): Incorrect parameter count in the call to native function 'CONVERT_TZ'