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

Comment CONVERT() fonctionne dans MariaDB

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) 

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() et COLLATION() 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 renvoie null :

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 1

Argument 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