Opérateurs et fonctions tous types
<<<
Les fonctions de contrôle Fonctions de chaînes de caractères
>>>

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.2 Les fonctions de contrôle

    IFNULL(expr1,expr2)
    Si l'argument expr1 n'est pas NULL , la fonction IFNULL() retournera l'argument expr1 , sinon elle retournera l'argument expr2 . La fonction IFNULL() retourne une valeur numérique ou une chaîne de caractères, suivant le contexte d'utilisation :
    
    mysql> SELECT IFNULL(1,0);
            -> 1
    mysql> SELECT IFNULL(NULL,10);
            -> 10
    mysql> SELECT IFNULL(1/0,10);
            -> 10
    mysql> SELECT IFNULL(1/0,'oui');
            -> 'oui'
    En version 4.0.6 et plus récent, le résultat par défaut de IFNULL(expr1,expr2) est le plus "général" des deux expressions, dans l'ordre de type STRING , REAL ou INTEGER . La différence avec les anciennes versions de MySQL ne seront notables que si vous créez une table basée sur des expressions, ou si MySQL stocke en interne des valeurs issues de IFNULL() dans une table temporaire.
    
    CREATE TABLE foo SELECT IFNULL(1,"test") as test;
    
    En MySQL 4.0.6, le type de la colonne test est CHAR(4) tandis que dans les versions plus anciennes, vous auriez obtenu un BIGINT .
    NULLIF(expr1,expr2)
    Si l'expression expr1 = expr2 est vrai, la fonction retourne NULL sinon elle retourne expr1 . Cela revient à faire CASE WHEN x = y THEN NULL ELSE x END :
    
    mysql> SELECT NULLIF(1,1);
            -> NULL
    mysql> SELECT NULLIF(1,2);
            -> 1
    Notez que l'argument expr1 est évalué deux fois dans MySQL si les arguments sont égaux.
    IF(expr1,expr2,expr3)
    Si l'argument expr1 vaut TRUE ( expr1 <> 0 et expr1 <> NULL ) alors la fonction IF() retourne l'argument expr2 , sinon, elle retourne l'argument expr3 . La fonction IF() retourne une valeur numérique ou une chaîne de caractères, suivant le contexte d'utilisation :
    
    mysql> SELECT IF(1>2,2,3);
            -> 3
    mysql> SELECT IF(1<2,'oui','non');
            -> 'oui'
    mysql> SELECT IF(STRCMP('test','test1'),'non','oui');
            -> 'non'
    Si l'argument expr2 ou expr3 est explicitement NULL alors le type du résultat de la fonction IF() est le type de la colonne non NULL . (Ce comportement est nouveau dans MySQL 4.0.3).

    L'argument expr1 est évalué comme un entier, cela signifie que si vous testez un nombre à virgule flottante ou une chaîne de caractères, vous devez utiliser une opération de comparaison :

    
    mysql> SELECT IF(0.1,1,0);
            -> 0
    mysql> SELECT IF(0.1<>0,1,0);
            -> 1
    Dans le premier exemple ci-dessus, IF(0.1) retourne 0 parce que 0.1 est converti en une chaîne de caractères, ce qui revient à tester IF(0) . Ce n'est certainement pas ce que vous désireriez. Dans le second exemple, la comparaison teste si le nombre à virgule flottante est différent de zéro. Le résultat de cette comparaison sera un entier.

    Le type de la fonction IF() (ce qui peut être important s'il est stocké dans une table temporaire) est calculé, dans la Version 3.23 de MySQL, comme suit :

    Expression Valeur retournée
    expr2 ou expr3 retourne une chaîne chaîne
    expr2 ou expr3 retourne un nombre à virgule nombre à virgule
    expr2 ou expr3 retourne un entier entier

    Si expr2 et expr3 sont des chaînes de caractères, alors le résultat est insensible à la casse si les deux chaînes de caractères sont insensibles à la casse. (A partir de la version 3.23.51 de MySQL)

    CASE valeur WHEN [compare-value] THEN résultat [WHEN [compare-value] THEN résultat ...] [ELSE résultat] END
    CASE WHEN [condition] THEN résultat [WHEN [condition] THEN résultat ...] [ELSE résultat] END
    La première version retourne résultat si valeur=compare-value . La seconde version retourne le résultat de la première condition qui se réalise. Si aucune des conditions n'est réalisé, alors le résultat de la clause ELSE est retourné. Si il n'y a pas de clause ELSE alors NULL est retourné :
    
    mysql> SELECT CASE 1 WHEN 1 THEN "un"
               WHEN 2 THEN "deux" ELSE "plus" END;
           -> "un"
    mysql> SELECT CASE WHEN 1>0 THEN "vrai" ELSE "faux" END;
           -> "vrai"
    mysql> SELECT CASE BINARY "B" WHEN "a" THEN 1 WHEN "b" THEN 2 END;
           -> NULL
Le type de la valeur retournée ( INTEGER , DOUBLE ou STRING ) est de même type que la première valeur retournée (l'expression après le premier THEN ).

<< Les fonctions de contrôle >>
Opérateurs et fonctions tous types Fonctions à utiliser dans les clauses SELECT et WHERE Fonctions de chaînes de caractères