sql >> Databasteknik >  >> RDS >> MariaDB

Hur CONVERT_TZ() fungerar i MariaDB

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'

  1. Oracle SQL - max() med NULL-värden

  2. Hur serialiserar jag en stor graf av .NET-objekt till en SQL Server BLOB utan att skapa en stor buffert?

  3. Varför SQL Server DATETIME-typ sparar tid i tick på 1/300 av en sek?

  4. MySql-fel:1364 Fältet 'display_name' har inte standardvärde