I SQL Server er IIF()
funktion (ikke at forveksle med IF
statement) er en betinget funktion, der returnerer det andet eller tredje argument baseret på evalueringen af det første argument.
Det er en kortfattet måde at skrive en CASE
på udtryk. Det svarer logisk til CASE WHEN X THEN Y ELSE Z END
forudsat IIF(X, Y, Z)
.
IIF()
er en forkortelse for Immediate IF .
Syntaks
Syntaksen ser sådan ud:
IIF ( boolean_expression, true_value, false_value )
Hvor:
- boolesk_udtryk er det udtryk, der skal evalueres.
- true_value returneres hvis boolean_expression er sandt.
- falsk_værdi returneres hvis boolean_expression er falsk eller ukendt.
Som med CASE
udtryk, IIF()
sætninger kan kun indlejres op til det maksimale niveau på 10.
Eksempel
Her er et grundlæggende eksempel for at demonstrere, hvordan IIF()
virker.
SELECT IIF( 1 < 2, 'True', 'False' );
Resultat:
True
I dette tilfælde er udtrykket, der skal evalueres, 1 < 2
. Det er rigtigt, at 1 er mindre end 2, så det andet argument blev returneret.
Dette svarer til at gøre følgende.
SELECT
CASE WHEN 1 < 2 THEN 'True'
ELSE 'False'
END;
Resultat:
True
I disse eksempler brugte jeg ordene "True" og "False", men jeg kunne have brugt hvad som helst.
For eksempel kunne jeg have gjort dette i stedet:
SELECT IIF( 1 < 2, 'Fail', 'Pass' );
Resultat:
Fail
Eller det kan være noget helt fjernet fra et "sandt" eller "falskt" svar af binær type.
For eksempel:
SELECT IIF( 1 < 2, 'Deadlift', 'Bench Press' );
Resultat:
Deadlift
Test af en variabel
I praksis ville du normalt teste variabler, kolonner osv. i stedet for konstanter som i de foregående eksempler.
Her er et eksempel, der tester en variabel.
DECLARE @bankBalance int = 123;
SELECT IIF(@bankBalance > 100, 'Rich!', 'Poor');
Resultat:
Rich!
Databaseeksempel
Her er et eksempel, der bruger kolonner fra en database.
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 | +----------------+--------------+-------------+
Indlejrede IIF()-funktioner
Her er et eksempel på at indlejre en IIF()
fungere. Med "indlejring" mener jeg, at jeg sender en anden IIF()
fungere som et argument til den ydre IIF()
funktion.
DECLARE @bankBalance int = 123;
SELECT IIF(
@bankBalance > 100,
IIF(@bankBalance > 150, 'Rich!', 'Wealthy'),
'Poor'
);
Resultat:
Wealthy
Du kan indlejre IIF()
fungerer op til et niveau på 10.