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'