Dans MariaDB, CONVERT()
est une fonction intégrée qui convertit une valeur en un autre type de données. Il prend une valeur d'un type et renvoie une valeur du type spécifié.
Vous fournissez la valeur en tant qu'argument lorsque vous appelez la fonction, ainsi que le type vers lequel vous souhaitez la convertir.
CONVERT()
est similaire à CAST()
.
Syntaxe
Le CONVERT()
la fonction peut être appelée en utilisant la syntaxe ODBC ou la syntaxe SQL92.
Syntaxe ODBC :
CONVERT(expr, type)
Syntaxe SQL92 :
CONVERT(expr USING charset)
Où expr
est la valeur à convertir, type
est le type de données vers lequel vous voulez le convertir.
En utilisant la syntaxe SQL92, charset
est le jeu de caractères vers lequel vous souhaitez le convertir.
Exemple
Voici un exemple simple :
SELECT CONVERT(123.45, INT);
Résultat :
+----------------------+| CONVERT(123.45, INT) |+----------------------+| 123 |+----------------------+
Cela a converti la valeur en un entier, ce qui a supprimé les décimales.
Voici un autre exemple :
SELECT CONVERT('2020-01-01', DATETIME);
Résultat :
+---------------------------------------------+| CONVERT('2020-01-01', DATEHEURE) |+---------------------------------+| 2020-01-01 00:00:00 |+---------------------------------------------+
Dans ce cas, nous avons converti une chaîne en un DATETIME
type de données.
Échec de la conversion
Dans l'exemple précédent, nous avons fourni une DATE
valide chaîne (ou DATE
littéral). Par conséquent, MariaDB a pu convertir la valeur en un DATETIME
type de données.
Cependant, voici ce qui se passe lorsque nous fournissons une DATE
non valide chaîne :
SELECT CONVERT('1 Jan, 2020', DATE);
Résultat :
+------------------------------+| CONVERT('1 Jan, 2020', DATE) |+------------------------------+| NULL |+------------------------------+
Ici, MariaDB n'a pas pu comprendre comment convertir cette valeur et a renvoyé NULL
.
Dans ce cas, nous pourrions utiliser une autre fonction, telle que STR_TO_DATE()
pour effectuer une telle conversion :
SELECT STR_TO_DATE('1 Jan, 2020', '%e %M, %Y');
Résultat :
+-------------------------------------------------------+| STR_TO_DATE('1er janvier 2020', '%e %M, %Y') |+------------------------------------------ ------------+| 2020-01-01 |+-------------------------------------------------------+Spécifiez un jeu de caractères
La syntaxe SQL92 nous permet de spécifier un jeu de caractères vers lequel effectuer la conversion.
Exemple :
SELECT CONVERT('ไม้เมือง' USING tis620);
Résultat :
+------------------------------------------------------------ ----+| CONVERT('ไม้เมือง' USING tis620) |+----------------------------------------------------- -----------+| ไม้เมือง |+------------------------------------------------------------ ----+La modification du jeu de caractères modifiera également le classement pour qu'il devienne le classement par défaut de ce jeu de caractères.
L'exemple ci-dessus ne montre pas vraiment comment le jeu de caractères/le classement a changé.
Heureusement, nous pouvons utiliser des fonctions telles que
CHARSET()
etCOLLATION()
pour voir comment le jeu de caractères et le classement ont changé :SELECT CHARSET('ไม้เมือง') AS a, COLLATION('ไม้เมือง') AS b, CHARSET(CONVERT('ไม้เมือง' USING tis620)) AS c, COLLATION(CONVERT('ไม้เมือง' USING tis620)) AS d;
Résultat :
+------+-----------------+--------+------------ ----+| un | b | c | d |+------+-----------------+--------+------------- ---+| utf8 | utf8_general_ci | tis620 | tis620_thai_ci |+------+-----------------+--------+------------- ---+Le premier utilise le jeu de caractères et le classement pour ma connexion. Le second utilise le jeu de caractères que nous avons explicitement spécifié avec
CONVERT()
, ainsi que le classement par défaut pour ce jeu de caractères.Consultez cette liste de classements disponibles dans MariaDB pour une liste complète des classements et leurs jeux de caractères correspondants.
Arguments nuls
Essayer de convertir
null
renvoienull
:SELECT CONVERT(null, DATETIME);
Résultat :
+-------------------------+| CONVERT(null, DATETIME) |+-------------------------+| NULL |+-------------------------+Cependant, passer
null
sans spécifier le nouveau type de données entraîne une erreur de syntaxe :SELECT CONVERT(null);
Résultat :
ERROR 1064 (42000) :vous avez une erreur dans votre syntaxe SQL ; consultez le manuel qui correspond à la version de votre serveur MariaDB pour la bonne syntaxe à utiliser près de ')' à la ligne 1Argument manquant
Appel de
CONVERT()
sans passer d'argument entraîne une erreur de syntaxe :SELECT CONVERT();
Résultat :
ERROR 1064 (42000) :vous avez une erreur dans votre syntaxe SQL ; consultez le manuel qui correspond à la version de votre serveur MariaDB pour la bonne syntaxe à utiliser près de ')' à la ligne 1