I SQL Server, IIF()
funktion (inte att förväxla med IF
statement) är en villkorlig funktion som returnerar det andra eller tredje argumentet baserat på utvärderingen av det första argumentet.
Det är ett kortfattat sätt att skriva ett CASE
uttryck. Det motsvarar logiskt sett CASE WHEN X THEN Y ELSE Z END
antar IIF(X, Y, Z)
.
IIF()
är en förkortning för Omedelbar OM .
Syntax
Syntaxen ser ut så här:
IIF ( boolean_expression, true_value, false_value )
Var:
- boolean_expression är uttrycket som ska utvärderas.
- true_value returneras om boolean_expression är sant.
- falskt_värde returneras om boolean_expression är falsk eller okänd.
Som med CASE
uttryck, IIF()
satser kan bara kapslas upp till maxnivån 10.
Exempel
Här är ett grundläggande exempel för att visa hur IIF()
fungerar.
SELECT IIF( 1 < 2, 'True', 'False' );
Resultat:
True
I det här fallet är uttrycket som ska utvärderas 1 < 2
. Det är sant att 1 är mindre än 2 så det andra argumentet returnerades.
Detta motsvarar att göra följande.
SELECT
CASE WHEN 1 < 2 THEN 'True'
ELSE 'False'
END;
Resultat:
True
I dessa exempel använde jag orden "Sant" och "False" men jag kunde ha använt vad som helst.
Jag kunde till exempel ha gjort så här istället:
SELECT IIF( 1 < 2, 'Fail', 'Pass' );
Resultat:
Fail
Eller det kan vara något helt borttaget från ett "sant" eller "falskt" svar av binär typ.
Till exempel:
SELECT IIF( 1 < 2, 'Deadlift', 'Bench Press' );
Resultat:
Deadlift
Testa en variabel
I praktiken skulle du normalt testa variabler, kolumner etc snarare än konstanter som i de tidigare exemplen.
Här är ett exempel som testar en variabel.
DECLARE @bankBalance int = 123;
SELECT IIF(@bankBalance > 100, 'Rich!', 'Poor');
Resultat:
Rich!
Databasexempel
Här är ett exempel som använder kolumner från en databas.
SELECT TOP(10)
Name,
Population,
IIF(
Population > 400000,
'Big City',
'Small City'
) AS 'Big/Small'
FROM city;
Resultat:
+----------------+--------------+-------------+ | 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 | +----------------+--------------+-------------+
Inkapslade IIF()-funktioner
Här är ett exempel på att kapsla en IIF()
fungera. Med "kapsla" menar jag att jag skickar en annan IIF()
fungerar som ett argument till den yttre IIF()
funktion.
DECLARE @bankBalance int = 123;
SELECT IIF(
@bankBalance > 100,
IIF(@bankBalance > 150, 'Rich!', 'Wealthy'),
'Poor'
);
Resultat:
Wealthy
Du kan kapsla IIF()
fungerar upp till en nivå av 10.