Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Comment IIF() fonctionne dans SQL Server

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.