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.