- Catégories :
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> )
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, renvoieexpr1
, sinon renvoieexpr2
.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');
+----------------------------+
| IFF(TRUE, 'TRUE', 'FALSE') |
|----------------------------|
| true |
+----------------------------+
Renvoie expr2
, car la condition est évaluée sur false :
SELECT IFF(FALSE, 'true', 'false');
+-----------------------------+
| IFF(FALSE, 'TRUE', 'FALSE') |
|-----------------------------|
| false |
+-----------------------------+
Renvoie expr2
, car la condition est évaluée sur NULL :
SELECT IFF(NULL, 'true', 'false');
+----------------------------+
| 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;
+---------+---------------------------------------------------+
| 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) );
+-------+--------------------------------+
| VALUE | IFF(VALUE > 50, 'HIGH', 'LOW') |
|-------+--------------------------------|
| 22 | Low |
| 63 | High |
| 5 | Low |
| 99 | High |
| NULL | Low |
+-------+--------------------------------+