I MariaDB, CONVERT_TZ()
er en indbygget dato- og tidsfunktion, der konverterer en datetime-værdi fra en tidszone til en anden.
Når du kalder funktionen, sender du tre argumenter:tiden, tidszonen, der skal konverteres fra , og den tidszone, der skal konverteres til .
Syntaks
Syntaksen ser sådan ud:
CONVERT_TZ(dt,from_tz,to_tz)
Hvor dt
er datetime-udtrykket, from_tz
er den tidszone, der skal konverteres fra , og to_tz
er den tidszone, der skal konverteres til .
Eksempel
Her er et eksempel:
SELECT CONVERT_TZ('2021-05-10 01:00:00', '+00:00', '+10:00');
Resultat:
+-------------------------------------------------------+ | CONVERT_TZ('2021-05-10 01:00:00', '+00:00', '+10:00') | +-------------------------------------------------------+ | 2021-05-10 11:00:00 | +-------------------------------------------------------+
Her er den oprindelige tidszone +00:00, og vi konverterede den til +10:00.
Her er, hvad der sker, hvis vi bruger en anden starttidszone:
SELECT CONVERT_TZ('2021-05-10 01:00:00', '+03:00', '+10:00');
Resultat:
+-------------------------------------------------------+ | CONVERT_TZ('2021-05-10 01:00:00', '+03:00', '+10:00') | +-------------------------------------------------------+ | 2021-05-10 08:00:00 | +-------------------------------------------------------+
Navngivne tidszoner
Navngivne tidszoner kan bruges, men det kræver, at de forskellige tidszonetabeller er indlæst.
Her er, hvad der sker, når tidszonetabellerne ikke udfyldt:
SELECT
CONVERT_TZ('2021-05-10 01:00:00', 'GMT', 'Pacific/Chatham');
Resultat:
+-------------------------------------------------------------+ | CONVERT_TZ('2021-05-10 01:00:00', 'GMT', 'Pacific/Chatham') | +-------------------------------------------------------------+ | NULL | +-------------------------------------------------------------+
Resultatet er null
, fordi der ikke er nogen tidszonedata i tidszonetabellerne.
Her er den samme forespørgsel igen, men denne gang med data i tidszonetabellerne:
SELECT
CONVERT_TZ('2021-05-10 01:00:00', 'GMT', 'Pacific/Chatham');
Resultat:
+-------------------------------------------------------------+ | CONVERT_TZ('2021-05-10 01:00:00', 'GMT', 'Pacific/Chatham') | +-------------------------------------------------------------+ | 2021-05-10 13:45:00 | +-------------------------------------------------------------+
Dato-tidsværdier uden for intervallet
Ingen konvertering finder sted, hvis værdien falder uden for den understøttede TIMESTAMP
interval ('1970-01-01 00:00:01'
til '2038-01-19 05:14:07'
UTC), når den konverteres fra from_tz
til UTC.
Eksempel:
SELECT CONVERT_TZ('2040-05-10 01:00:00', '+00:00', '+10:00');
Resultat:
+-------------------------------------------------------+ | CONVERT_TZ('2040-05-10 01:00:00', '+00:00', '+10:00') | +-------------------------------------------------------+ | 2040-05-10 01:00:00 | +-------------------------------------------------------+
Ugyldige argumenter
Hvis nogen af argumenterne er ugyldige, CONVERT_TZ()
returnerer null
.
Eksempel:
SELECT CONVERT_TZ('2040-05-10 01:00:00', '+00:00', '+90:00');
Resultat:
+-------------------------------------------------------+ | CONVERT_TZ('2040-05-10 01:00:00', '+00:00', '+90:00') | +-------------------------------------------------------+ | NULL | +-------------------------------------------------------+
I dette tilfælde forsøgte jeg at konvertere datetime-udtrykket til en ugyldig tidszone (+90:00
), og så null
blev returneret.
Nul-argumenter
Hvis et argument er null
, resultatet er 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";
Resultat:
+------+------+------+ | 1 | 2 | 3 | +------+------+------+ | NULL | NULL | NULL | +------+------+------+
Manglende argument
Kalder CONVERT_TZ()
med det forkerte antal argumenter, eller uden at sende nogen argumenter, resulterer det i en fejl:
SELECT CONVERT_TZ();
Resultat:
ERROR 1582 (42000): Incorrect parameter count in the call to native function 'CONVERT_TZ'