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'