Catégories :

Fonctions d’expressions conditionnelles

IFF

Renvoie l’une des deux valeurs, selon que l’expression booléenne est évaluée sur true ou sur false. Cette fonction est similaire à une expression if-then-else à un seul niveau. Elle est similaire à CASE, mais n’autorise qu’une seule condition. Vous pouvez l’utiliser pour ajouter une logique conditionnelle aux instructions SQL.

Syntaxe

IFF( <condition> , <expr1> , <expr2> )
Copy

Arguments

condition

La condition est une expression qui doit être évaluée sur une valeur BOOLEAN (TRUE, FALSE ou NULL).

Si la condition correspond à TRUE, renvoie expr1, sinon renvoie expr2.

expr1

Une expression générale. La fonction renvoie cette valeur si la condition est vraie.

expr2

Une expression générale. La fonction renvoie cette valeur si la condition n’est pas vraie (c’est-à-dire si elle est fausse ou NULL).

Renvoie

Cette fonction peut renvoyer une valeur de n’importe quel type. La fonction peut renvoyer NULL si la valeur de l’expression renvoyée est NULL.

Notes sur l’utilisation

La condition peut inclure une instruction SELECT contenant des opérateurs d’ensemble tels que UNION, INTERSECT, EXCEPT et MINUS. Lorsque vous utilisez des opérateurs Set, assurez-vous que les types de données sont compatibles. Pour plus d’informations, voir Notes générales sur l’utilisation dans la rubrique Définir les opérateurs.

Détails du classement

La valeur renvoyée par la fonction conserve la spécification de classement du classement ayant la plus haute priorité des arguments expr1 et expr2.

Exemples

Les exemples suivants utilisent la fonction IFF.

Renvoie expr1, car la condition est évaluée sur true :

SELECT IFF(TRUE, 'true', 'false');
Copy
+----------------------------+
| IFF(TRUE, 'TRUE', 'FALSE') |
|----------------------------|
| true                       |
+----------------------------+

Renvoie expr2, car la condition est évaluée sur false :

SELECT IFF(FALSE, 'true', 'false');
Copy
+-----------------------------+
| IFF(FALSE, 'TRUE', 'FALSE') |
|-----------------------------|
| false                       |
+-----------------------------+

Renvoie expr2, car la condition est évaluée sur NULL :

SELECT IFF(NULL, 'true', 'false');
Copy
+----------------------------+
| IFF(NULL, 'TRUE', 'FALSE') |
|----------------------------|
| false                      |
+----------------------------+

Renvoie NULL car la valeur de l’expression retournée est NULL :

SELECT IFF(TRUE, NULL, 'false');
Copy
+--------------------------+
| IFF(TRUE, NULL, 'FALSE') |
|--------------------------|
| NULL                     |
+--------------------------+

Renvoie expr1 (integer) si la valeur est un entier, ou renvoie expr2 (non-integer) si la valeur n’est pas un entier :

SELECT value, IFF(value::INT = value, 'integer', 'non-integer')
  FROM ( SELECT column1 AS value
           FROM VALUES(1.0), (1.1), (-3.1415), (-5.000), (NULL) )
  ORDER BY value DESC;
Copy
+---------+---------------------------------------------------+
|   VALUE | IFF(VALUE::INT = VALUE, 'INTEGER', 'NON-INTEGER') |
|---------+---------------------------------------------------|
|    NULL | non-integer                                       |
|  1.1000 | non-integer                                       |
|  1.0000 | integer                                           |
| -3.1415 | non-integer                                       |
| -5.0000 | integer                                           |
+---------+---------------------------------------------------+

Renvoie expr1 (High) si la valeur est supérieure à 50, ou renvoie expr2 (Low) si la valeur est inférieure ou égale à 50 (ou NULL) :

SELECT value, IFF(value > 50, 'High', 'Low')
FROM ( SELECT column1 AS value
         FROM VALUES(22), (63), (5), (99), (NULL) );
Copy
+-------+--------------------------------+
| VALUE | IFF(VALUE > 50, 'HIGH', 'LOW') |
|-------+--------------------------------|
|    22 | Low                            |
|    63 | High                           |
|     5 | Low                            |
|    99 | High                           |
|  NULL | Low                            |
+-------+--------------------------------+