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. Cette valeur est renvoyée si la condition est vraie.

expr2

Une expression générale. Cette valeur est renvoyée si la condition est fausse (c’est-à-dire si elle est false ou NULL).

Renvoie

La fonction renvoie une valeur de type de données VARCHAR.

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 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                            |
+-------+--------------------------------+