sql >> Database >  >> RDS >> Sqlserver

Hoe IIF() werkt in SQL Server

In SQL Server is de IIF() functie (niet te verwarren met de IF statement) is een voorwaardelijke functie die het tweede of derde argument retourneert op basis van de evaluatie van het eerste argument.

Het is een verkorte manier voor het schrijven van een CASE uitdrukking. Het is logisch gelijk aan CASE WHEN X THEN Y ELSE Z END uitgaande van IIF(X, Y, Z) .

IIF() is een afkorting voor Immediate IF .

Syntaxis

De syntaxis gaat als volgt:

IIF ( boolean_expression, true_value, false_value )

Waar:

  • boolean_expression is de uitdrukking die moet worden geëvalueerd.
  • true_value wordt geretourneerd als boolean_expression is waar.
  • false_value wordt geretourneerd als boolean_expression is onwaar of onbekend.

Zoals bij CASE uitdrukkingen, IIF() uitspraken kunnen alleen worden genest tot het maximale niveau van 10.

Voorbeeld

Hier is een eenvoudig voorbeeld om te laten zien hoe IIF() werkt.

SELECT IIF( 1 < 2, 'True', 'False' );

Resultaat:

True

In dit geval is de te evalueren uitdrukking 1 < 2 . Het is waar dat 1 kleiner is dan 2, dus het tweede argument is geretourneerd.

Dit komt overeen met het volgende doen.

SELECT 
  CASE WHEN 1 < 2 THEN 'True'
    ELSE 'False'
  END;

Resultaat:

True

In deze voorbeelden heb ik de woorden "True" en "False" gebruikt, maar ik had alles kunnen gebruiken.

Ik had bijvoorbeeld dit kunnen doen:

SELECT IIF( 1 < 2, 'Fail', 'Pass' );

Resultaat:

Fail

Of het kan iets zijn dat volledig is verwijderd van een "waar" of "onjuist" binair antwoord.

Bijvoorbeeld:

SELECT IIF( 1 < 2, 'Deadlift', 'Bench Press' );

Resultaat:

Deadlift

Een variabele testen

In de praktijk zou je normaal gesproken variabelen, kolommen, enz. testen in plaats van constanten zoals in de vorige voorbeelden.

Hier is een voorbeeld dat een variabele test.

DECLARE @bankBalance int = 123;
SELECT IIF(@bankBalance > 100, 'Rich!', 'Poor');

Resultaat:

Rich!

Databasevoorbeeld

Hier is een voorbeeld dat kolommen uit een database gebruikt.

SELECT TOP(10)
    Name,
    Population,
    IIF( 
        Population > 400000, 
        'Big City', 
        'Small City' 
        ) AS 'Big/Small'
FROM city;

Resultaat:

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

Geneste IIF()-functies

Hier is een voorbeeld van het nesten van een IIF() functie. Met "nesten" bedoel ik dat ik een andere IIF() . doorgeef functioneren als een argument voor de buitenste IIF() functie.

DECLARE @bankBalance int = 123;
SELECT IIF(
    @bankBalance > 100, 
    IIF(@bankBalance > 150, 'Rich!', 'Wealthy'), 
    'Poor'
    );

Resultaat:

Wealthy

U kunt IIF() . nesten functioneert tot een niveau van 10.


  1. Kan gevraagde service niet maken [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment]

  2. Hoe Oracle EBS Auditing in te stellen

  3. Verschillende manieren om SQL Server AlwaysOn-beschikbaarheidsgroepen te bewaken

  4. MySql Single Table, Selecteer laatste 7 dagen en voeg lege rijen toe