Dans SQL Server, le IIF()
fonction (à ne pas confondre avec la fonction IF
instruction) est une fonction conditionnelle qui renvoie le deuxième ou le troisième argument en fonction de l'évaluation du premier argument.
C'est un raccourci pour écrire un CASE
expression. C'est logiquement équivalent à CASE WHEN X THEN Y ELSE Z END
en supposant IIF(X, Y, Z)
.
IIF()
est une abréviation pour SI immédiat .
Syntaxe
La syntaxe ressemble à ceci :
IIF ( boolean_expression, true_value, false_value )
Où :
- expression_booléenne est l'expression à évaluer.
- true_value est renvoyé si expression_booléenne est vrai.
- false_value est renvoyé si expression_booléenne est faux ou inconnu.
Comme avec CASE
expressions, IIF()
les instructions ne peuvent être imbriquées que jusqu'au niveau maximum de 10.
Exemple
Voici un exemple de base pour montrer comment IIF()
fonctionne.
SELECT IIF( 1 < 2, 'True', 'False' );
Résultat :
True
Dans ce cas, l'expression à évaluer est 1 < 2
. Il est vrai que 1 est inférieur à 2 donc le deuxième argument a été retourné.
Cela équivaut à faire ce qui suit.
SELECT
CASE WHEN 1 < 2 THEN 'True'
ELSE 'False'
END;
Résultat :
True
Dans ces exemples, j'ai utilisé les mots "Vrai" et "Faux", mais j'aurais pu utiliser n'importe quoi.
Par exemple, j'aurais pu faire ceci à la place :
SELECT IIF( 1 < 2, 'Fail', 'Pass' );
Résultat :
Fail
Ou cela pourrait être quelque chose de complètement retiré d'une réponse de type binaire "vrai" ou "faux".
Par exemple :
SELECT IIF( 1 < 2, 'Deadlift', 'Bench Press' );
Résultat :
Deadlift
Tester une variable
En pratique, vous testerez normalement des variables, des colonnes, etc. plutôt que des constantes comme dans les exemples précédents.
Voici un exemple qui teste une variable.
DECLARE @bankBalance int = 123;
SELECT IIF(@bankBalance > 100, 'Rich!', 'Poor');
Résultat :
Rich!
Exemple de base de données
Voici un exemple qui utilise des colonnes d'une base de données.
SELECT TOP(10)
Name,
Population,
IIF(
Population > 400000,
'Big City',
'Small City'
) AS 'Big/Small'
FROM city;
Résultat :
+----------------+--------------+-------------+ | Name | Population | Big/Small | |----------------+--------------+-------------| | Kabul | 1780000 | Big City | | Qandahar | 237500 | Small City | | Herat | 186800 | Small City | | Mazar-e-Sharif | 127800 | Small City | | Amsterdam | 731200 | Big City | | Rotterdam | 593321 | Big City | | Haag | 440900 | Big City | | Utrecht | 234323 | Small City | | Eindhoven | 201843 | Small City | | Tilburg | 193238 | Small City | +----------------+--------------+-------------+
Fonctions IIF() imbriquées
Voici un exemple d'imbrication d'un IIF()
une fonction. Par "imbrication", je veux dire que je passe un autre IIF()
fonction comme argument du IIF()
externe fonction.
DECLARE @bankBalance int = 123;
SELECT IIF(
@bankBalance > 100,
IIF(@bankBalance > 150, 'Rich!', 'Wealthy'),
'Poor'
);
Résultat :
Wealthy
Vous pouvez imbriquer IIF()
fonctionne jusqu'au niveau 10.