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

Comment CAST() fonctionne dans MariaDB

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) 

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 le collation_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 le utf16 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 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 1

Argument 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