V SQL Server, IIF()
funkce (nezaměňovat s IF
statement) je podmíněná funkce, která vrací druhý nebo třetí argument na základě vyhodnocení prvního argumentu.
Je to zkrácený způsob psaní CASE
výraz. Je to logicky ekvivalentní CASE WHEN X THEN Y ELSE Z END
za předpokladu IIF(X, Y, Z)
.
IIF()
je zkratka pro okamžité IF .
Syntaxe
Syntaxe vypadá takto:
IIF ( boolean_expression, true_value, false_value )
Kde:
- booleovský_výraz je výraz, který má být vyhodnocen.
- skutečná_hodnota je vráceno, pokud booleovský_výraz je pravda.
- false_value je vráceno, pokud booleovský_výraz je nepravdivé nebo neznámé.
Stejně jako u CASE
výrazy, IIF()
příkazy lze vnořit pouze do maximální úrovně 10.
Příklad
Zde je základní příklad, který ukazuje, jak IIF()
funguje.
SELECT IIF( 1 < 2, 'True', 'False' );
Výsledek:
True
V tomto případě je výraz k vyhodnocení 1 < 2
. Je pravda, že 1 je menší než 2, takže byl vrácen druhý argument.
Toto je ekvivalent provedení následujícího.
SELECT
CASE WHEN 1 < 2 THEN 'True'
ELSE 'False'
END;
Výsledek:
True
V těchto příkladech jsem použil slova „True“ a „False“, ale mohl jsem použít cokoli.
Místo toho jsem mohl například udělat toto:
SELECT IIF( 1 < 2, 'Fail', 'Pass' );
Výsledek:
Fail
Nebo to může být něco úplně odstraněného z odpovědi binárního typu „pravda“ nebo „nepravda“.
Například:
SELECT IIF( 1 < 2, 'Deadlift', 'Bench Press' );
Výsledek:
Deadlift
Testování proměnné
V praxi byste normálně testovali proměnné, sloupce atd. spíše než konstanty jako v předchozích příkladech.
Zde je příklad, který testuje proměnnou.
DECLARE @bankBalance int = 123;
SELECT IIF(@bankBalance > 100, 'Rich!', 'Poor');
Výsledek:
Rich!
Příklad databáze
Zde je příklad, který používá sloupce z databáze.
SELECT TOP(10)
Name,
Population,
IIF(
Population > 400000,
'Big City',
'Small City'
) AS 'Big/Small'
FROM city;
Výsledek:
+----------------+--------------+-------------+ | 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 | +----------------+--------------+-------------+
Vnořené funkce IIF()
Zde je příklad vnoření IIF()
funkce. „Vnořením“ myslím, že předávám další IIF()
fungovat jako argument pro vnější IIF()
funkce.
DECLARE @bankBalance int = 123;
SELECT IIF(
@bankBalance > 100,
IIF(@bankBalance > 150, 'Rich!', 'Wealthy'),
'Poor'
);
Výsledek:
Wealthy
Můžete vnořit IIF()
funguje až do úrovně 10.