Recherche en texte intégral ( Full-text ) dans MySQL
<<<
Fonctions de transtypage Autres fonctions
>>>

13 Fonctions à utiliser dans les clauses SELECT et WHERE
 Manuel de Référence MySQL 4.1 : Version Française

Opérateurs et fonctions tous types
Les fonctions de contrôle
Fonctions de chaînes de caractères
Fonctions numériques
Fonctions de dates et d'heures
Recherche en texte intégral ( Full-text ) dans MySQL
->Fonctions de transtypage
Autres fonctions
Fonctions et options à utiliser dans les clauses GROUP BY

13.7 Fonctions de transtypage

    CAST(expr AS type)
    CONVERT(expr,type)
    CONVERT(expr USING transcoding_name)

    Les fonctions CAST() et CONVERT() peuvent être utilisées pour convertir une donnée d'un type en un autre. Leurs syntaxes sont :

    La valeur de type peut être l'une des suivantes :
      BINARY
      CHAR
      DATE
      DATETIME
      SIGNED {INTEGER}
      TIME
      UNSIGNED {INTEGER}
    CAST() et CONVERT() sont disponibles depuis MySQL 4.0.2. La conversion de type CHAR est disponible depuis la version 4.0.6. La forme USING de CONVERT() est disponible depuis la version 4.1.0.

    CAST() et CONVERT(... USING ...) sont des syntaxes SQL-99. La forme sans USING de CONVERT() est une syntaxe ODBC.

    CONVERT() avec la clause USING sert à convertir des données entre différent jeux de caractères. Avec MySQL, les noms d'encodage sont les mêmes que les noms des jeux de caractères. Par exemple, cette commande converti la chaîne 'abc' depuis le jeu de caractères par défaut du serveur vers utf8 :
    
    SELECT CONVERT('abc' USING utf8);
    
La fonction de transtypage est très pratique lorsque vous voulez créer une colonne avec un type spécifique dans une requête CREATE ... SELECT :

CREATE TABLE nouvelle_table SELECT CAST('2000-01-01' AS DATE);
Les fonctions peuvent aussi être utilisée pour trier des colonnes de type ENUM en ordre lexical. Normalement, le tri sur les colonnes ENUM est fait avec les valeurs numériques internes. Pour trier les valeurs avec l'ordre lexical CHAR :

SELECT enum_col FROM tbl_name ORDER BY CAST(enum_col AS CHAR);
CAST(string AS BINARY) est l'équivalent de BINARY string . CAST(expr AS CHAR) traite l'expression comme une chaîne, avec le jeu de caractères par défaut.

Note : en MySQL 4.0 le CAST() en DATE , DATETIME ou TIME ne fait que marquer la colonne comme étant du type indiqué, mais n'en change pas la valeur.

En MySQL 4.1.0, la valeur est convertie dans le type de colonne demandé, puis il est envoyé à l'utilisateur. Cette fonctionnalité est une nouveauté du protocole 4.1, qui envoie les données au client :

mysql> SELECT CAST(NOW() AS DATE);
       -> 2003-05-26
Dans les prochaines versions de MySQL (probablement 4.1.2 ou 5.0) nous allons corriger CAST pour qu'elle modifie le résultat si vous l'utilisez comme une partie d'une expression plus complexe, comme CONCAT("Date: ",CAST(NOW() AS DATE)) .N'utilisez pas CAST() pour extraire des données dans différents formats, mais utilisez plutôt LEFT ou EXTRACT() . Fonctions de date et heure .

Pour transformer une chaîne de caractères en une valeur numérique, vous ne devez rien faire de particulier ; juste utiliser la valeur de la chaîne en lieu et place de la valeur numérique :


mysql> SELECT 1+'1';
       -> 2
Si vous utilisez un nombre dans un contexte de chaîne, le nombre sera automatiquement converti en une chaîne binaire.

mysql> SELECT concat("salut toi ",2);
       ->  "salut toi 2"
Si vous utilisez un nombre dans un contexte de chaîne, le nombre sera automatiquement converti en chaîne binaire ( BINARY ).

mysql> SELECT CONCAT("Salut vous ",2);
       ->  "Salut vous 2"
MySQL supporte l'arithmétique avec les valeurs 64 bits signées et non signées. Si vous utilisez une opération numérique (comme le signe + ) et qu'un des opérandes est de type unsigned integer , alors, le résultat sera une valeur non signé. Vous pouvez corriger cela en utilisant les opérateurs de transtypages SIGNED et UNSIGNED , qui transformeront l'opération respectivement en un entier signé sur 64 bits et un entier non signé sur 64 bits.

mysql> SELECT CAST(1-2 AS UNSIGNED)
        -> 18446744073709551615
mysql> SELECT CAST(CAST(1-2 AS UNSIGNED) AS SIGNED);
        -> -1
Notez que si l'une ou l'autre opération est une valeur à virgule flottante (Dans ce contexte, DECIMAL() est considéré comme une valeur à virgule flottante) le résultat devrait être une valeur à virgule flottante et ne sera pas affecté par la règle ci-dessus.

mysql> SELECT CAST(1 AS UNSIGNED) -2.0
        -> -1.0
Si vous utilisez une chaîne dans une opération arithmétique, elle sera converti en un nombre à virgule flottante.

Les fonctions CAST() et CONVERT() ont été ajoutées dans la version 4.0.2 de MySQL.

L'affichage des valeurs non signées a été modifié dans la version 4.0 de MySQL pour pouvoir supporter correctement les valeurs de type BIGINT . Si vous voulez utiliser du code fonctionnant dans la version 4.0 et la version 3.23 de MySQL (dans ce cas, vous ne pouvez probablement pas utiliser les fonctions de transtypage), vous pouvez utiliser l'astuce suivante pour avoir un résultat signé lorsque vous soustrayez deux colonnes d'entier non signé :

SELECT (unsigned_column_1+0.0)-(unsigned_column_2+0.0);
L'idée est que les colonnes sont convertis en un point mobile avant de faire la soustraction.Si vous rencontrez un problème avec les colonnes UNSIGNED dans vos anciennes applications MySQL lorsque vous effectuez le port sous la version 4.0 de MySQL , vous pouvez utiliser l'option --sql-mode=NO_UNSIGNED_SUBTRACTION lorsque vous lancez mysqld . Notez cependant qu'aussi longtemps que vous employez ceci, vous ne serez pas capable d'utiliser efficacement les colonnes de type UNSIGNED BIGINT .

<< Fonctions de transtypage >>
Recherche en texte intégral ( Full-text ) dans MySQL Fonctions à utiliser dans les clauses SELECT et WHERE Autres fonctions