Dans MariaDB, CAST()
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.
CAST()
fonctionne comme CONVERT()
.
Syntaxe
La syntaxe ressemble à ceci :
CAST(expr AS type)
Où expr
est la valeur à convertir, et type
est le type de données vers lequel vous voulez le convertir.
Exemple
Voici un exemple simple :
SELECT CAST(123.45 AS INT);
Résultat :
+---------------------+| CAST(123.45 AS INT) |+---------------------+| 123 |+---------------------+
Cela convertit la valeur en entier et, par conséquent, les décimales ont été supprimées.
Voici un autre exemple :
SELECT CAST('2020-01-01' AS DATETIME);
Résultat :
+---------------------------------------------+| CAST('2020-01-01' AS DATETIME) |+--------------------------------+| 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 CAST('1 Jan, 2020' AS DATE);
Résultat :
+-----------------------------+| CAST('1 Jan, 2020' COMME DATE) |+-----------------------------+| NULL |+-----------------------------+
Ici, MariaDB n'a apparemment pas compris 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
Il est possible de spécifier un jeu de caractères à utiliser pour la valeur de retour lors de l'utilisation de
CAST()
une fonction.Exemple :
SELECT COLLATION(123) AS "123", COLLATION(CAST(123 AS CHAR CHARACTER SET utf16)) AS "utf16", COLLATION(CAST(123 AS CHAR CHARACTER SET latin1)) AS "latin1", COLLATION(CAST(123 AS CHAR CHARACTER SET big5)) AS "big5";
Résultat :
+--------+------------------+------------------ -+-----------------+| 123 | utf16 | latin1 | grand5 |+--------+------------------+------------------- +-----------------+| binaire | utf16_general_ci | latin1_swedish_ci | big5_chinese_ci |+--------+------------------+------------------- +-----------------+Ici, nous avons utilisé le
COLLATION()
pour renvoyer le classement de chaque valeur après qu'elle ait été transtypée dans le nouveau type de données. Chaque valeur utilise le classement par défaut pour le jeu de caractères spécifié.La valeur initiale n'est pas une chaîne, et donc
COLLATION()
renvoie binaire.Conversion en
CHAR
sans spécifier le jeu de caractères entraînera lecollation_connection
classement du jeu de caractères utilisé.Spécifier un classement
Il est également possible de spécifier un classement.
Exemple :
SELECT COLLATION(123) AS "123", COLLATION(CAST(123 AS CHAR CHARACTER SET utf16) COLLATE utf16_icelandic_ci) AS "utf16", COLLATION(CAST(123 AS CHAR CHARACTER SET latin1) COLLATE latin1_german2_ci) AS "latin1", COLLATION(CAST(123 AS CHAR CHARACTER SET big5) COLLATE big5_chinese_nopad_ci) AS "big5";
Résultat :
+--------+--------------------+---------------- ---+-----------------------+| 123 | utf16 | latin1 | grand5 |+--------+--------------------+----------------- --+----------------------+| binaire | utf16_icelandic_ci | latin1_german2_ci | big5_chinese_nopad_ci |+--------+--------------------+----------------- --+----------------------+Dans ce cas, nous avons explicitement spécifié un classement à utiliser qui n'est pas le classement par défaut pour le jeu de caractères spécifié (bien qu'il s'agisse toujours d'un classement valide pour le jeu de caractères).
La spécification d'un classement non valide pour le jeu de caractères entraîne une erreur.
Voici ce qui se passe lorsque j'inverse les deux premiers classements :
SELECT COLLATION(123) AS "123", COLLATION(CAST(123 AS CHAR CHARACTER SET utf16) COLLATE latin1_german2_ci) AS "utf16", COLLATION(CAST(123 AS CHAR CHARACTER SET latin1) COLLATE utf16_icelandic_ci) AS "latin1", COLLATION(CAST(123 AS CHAR CHARACTER SET big5) COLLATE big5_chinese_nopad_ci) AS "big5";
Résultat :
ERREUR 1253 (42000) :COLLATION 'latin1_german2_ci' n'est pas valide pour CHARACTER SET 'utf16'Il est arrivé au premier et a renvoyé une erreur, car
latin1_german2_ci
n'est pas un classement valide pour leutf16
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 CAST(null AS DATETIME);
Résultat :
+------------------------+| CAST(null AS DATETIME) |+------------------------+| NULL |+------------------------+Cependant, passer
null
sans spécifier le nouveau type de données entraîne une erreur :SELECT CAST(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
CAST()
sans passer d'argument génère une erreur :SELECT CAST();
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