I MariaDB, CONVERT_TZ()
är en inbyggd datum- och tidsfunktion som konverterar ett datetime-värde från en tidszon till en annan.
När du anropar funktionen skickar du tre argument:tiden, tidszonen att konvertera från , och tidszonen att konvertera till .
Syntax
Syntaxen ser ut så här:
CONVERT_TZ(dt,from_tz,to_tz)
Där dt
är datetime-uttrycket, from_tz
är tidszonen att konvertera från och to_tz
är tidszonen att konvertera till .
Exempel
Här är ett exempel:
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 | +-------------------------------------------------------+
Här är den ursprungliga tidszonen +00:00, och vi konverterade den till +10:00.
Så här händer om vi använder en annan starttidszon:
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 | +-------------------------------------------------------+
Namngivna tidszoner
Namngivna tidszoner kan användas, men detta kräver att de olika tidszonstabellerna har laddats.
Det här är vad som händer när tidszonstabellerna inte är fylld:
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 är null
, eftersom det inte finns några tidszonsdata i tidszonstabellerna.
Här är samma fråga igen, men den här gången med data i tidszonstabellerna:
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 | +-------------------------------------------------------------+
Datetime-värden utanför intervallet
Ingen konvertering kommer att ske om värdet faller utanför TIMESTAMP
som stöds intervall ('1970-01-01 00:00:01'
till '2038-01-19 05:14:07'
UTC) när den konverteras från from_tz
till UTC.
Exempel:
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 | +-------------------------------------------------------+
Ogiltiga argument
Om något av argumenten är ogiltigt, CONVERT_TZ()
returnerar null
.
Exempel:
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 det här fallet försökte jag konvertera datetime-uttrycket till en ogiltig tidszon (+90:00
), och så null
returnerades.
Nollargument
Om något argument är null
, resultatet är 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 | +------+------+------+
Argument saknas
Anropar CONVERT_TZ()
med fel antal argument, eller utan att skicka några argument resulterar i ett fel:
SELECT CONVERT_TZ();
Resultat:
ERROR 1582 (42000): Incorrect parameter count in the call to native function 'CONVERT_TZ'