MariaDB
 sql >> Base de données >  >> RDS >> MariaDB

Comment CONVERT_TZ() fonctionne dans MariaDB

Dans MariaDB, CONVERT_TZ() est une fonction de date et d'heure intégrée qui convertit une valeur datetime d'un fuseau horaire à un autre.

Lorsque vous appelez la fonction, vous passez trois arguments :l'heure, le fuseau horaire à convertir à partir de , et le fuseau horaire pour convertir vers .

Syntaxe

La syntaxe ressemble à ceci :

CONVERT_TZ(dt,from_tz,to_tz)

dt est l'expression datetime, from_tz est le fuseau horaire à convertir à partir de , et to_tz est le fuseau horaire à convertir dans .

Exemple

Voici un exemple :

SELECT CONVERT_TZ('2021-05-10 01:00:00', '+00:00', '+10:00');

Résultat :

+-------------------------------------------------------+
| CONVERT_TZ('2021-05-10 01:00:00', '+00:00', '+10:00') |
+-------------------------------------------------------+
| 2021-05-10 11:00:00                                   |
+-------------------------------------------------------+

Ici, le fuseau horaire d'origine est +00:00, et nous l'avons converti en +10:00.

Voici ce qui se passe si nous utilisons un fuseau horaire de départ différent :

SELECT CONVERT_TZ('2021-05-10 01:00:00', '+03:00', '+10:00');

Résultat :

+-------------------------------------------------------+
| CONVERT_TZ('2021-05-10 01:00:00', '+03:00', '+10:00') |
+-------------------------------------------------------+
| 2021-05-10 08:00:00                                   |
+-------------------------------------------------------+

Fuseaux horaires nommés

Des fuseaux horaires nommés peuvent être utilisés, mais cela nécessite que les différentes tables de fuseaux horaires aient été chargées.

Voici ce qui se passe lorsque les tables de fuseaux horaires ne le sont pas rempli :

SELECT 
CONVERT_TZ('2021-05-10 01:00:00', 'GMT', 'Pacific/Chatham');

Résultat :

+-------------------------------------------------------------+
| CONVERT_TZ('2021-05-10 01:00:00', 'GMT', 'Pacific/Chatham') |
+-------------------------------------------------------------+
| NULL                                                        |
+-------------------------------------------------------------+

Le résultat est null , car il n'y a pas de données de fuseau horaire dans les tableaux de fuseaux horaires.

Voici à nouveau la même requête, mais cette fois avec des données dans les tables de fuseaux horaires :

SELECT 
CONVERT_TZ('2021-05-10 01:00:00', 'GMT', 'Pacific/Chatham');

Résultat :

+-------------------------------------------------------------+
| CONVERT_TZ('2021-05-10 01:00:00', 'GMT', 'Pacific/Chatham') |
+-------------------------------------------------------------+
| 2021-05-10 13:45:00                                         |
+-------------------------------------------------------------+

Valeurs date/heure hors limites

Aucune conversion n'aura lieu si la valeur se situe en dehors du TIMESTAMP pris en charge plage ('1970-01-01 00:00:01' à '2038-01-19 05:14:07' UTC) lors de la conversion à partir de from_tz à UTC.

Exemple :

SELECT CONVERT_TZ('2040-05-10 01:00:00', '+00:00', '+10:00');

Résultat :

+-------------------------------------------------------+
| CONVERT_TZ('2040-05-10 01:00:00', '+00:00', '+10:00') |
+-------------------------------------------------------+
| 2040-05-10 01:00:00                                   |
+-------------------------------------------------------+

Arguments invalides

Si l'un des arguments n'est pas valide, CONVERT_TZ() renvoie null .

Exemple :

SELECT CONVERT_TZ('2040-05-10 01:00:00', '+00:00', '+90:00');

Résultat :

+-------------------------------------------------------+
| CONVERT_TZ('2040-05-10 01:00:00', '+00:00', '+90:00') |
+-------------------------------------------------------+
| NULL                                                  |
+-------------------------------------------------------+

Dans ce cas, j'ai essayé de convertir l'expression datetime en un fuseau horaire invalide (+90:00 ), et donc null a été renvoyé.

Arguments nuls

Si un argument est null , le résultat est 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";

Résultat :

+------+------+------+
| 1    | 2    | 3    |
+------+------+------+
| NULL | NULL | NULL |
+------+------+------+

Argument manquant

Appel de CONVERT_TZ() avec le mauvais nombre d'arguments, ou sans passage d'arguments, une erreur se produit :

SELECT CONVERT_TZ();

Résultat :

ERROR 1582 (42000): Incorrect parameter count in the call to native function 'CONVERT_TZ'