In SQL Server das IIF()
Funktion (nicht zu verwechseln mit dem IF
-Anweisung) ist eine bedingte Funktion, die das zweite oder dritte Argument basierend auf der Auswertung des ersten Arguments zurückgibt.
Es ist eine Kurzform zum Schreiben eines CASE
Ausdruck. Es ist logisch äquivalent zu CASE WHEN X THEN Y ELSE Z END
unter der Annahme von IIF(X, Y, Z)
.
IIF()
ist eine Abkürzung für Immediate IF .
Syntax
Die Syntax lautet wie folgt:
IIF ( boolean_expression, true_value, false_value )
Wo:
- boolescher_Ausdruck ist der auszuwertende Ausdruck.
- true_value wird zurückgegeben, wenn boolean_expression stimmt.
- false_value wird zurückgegeben, wenn boolean_expression ist falsch oder unbekannt.
Wie bei CASE
Ausdrücke, IIF()
Anweisungen können nur bis zur maximalen Ebene von 10 verschachtelt werden.
Beispiel
Hier ist ein einfaches Beispiel, um zu demonstrieren, wie IIF()
funktioniert.
SELECT IIF( 1 < 2, 'True', 'False' );
Ergebnis:
True
In diesem Fall ist der auszuwertende Ausdruck 1 < 2
. Es stimmt, dass 1 kleiner als 2 ist, also wurde das zweite Argument zurückgegeben.
Dies entspricht dem folgenden Vorgehen.
SELECT
CASE WHEN 1 < 2 THEN 'True'
ELSE 'False'
END;
Ergebnis:
True
In diesen Beispielen habe ich die Wörter „Wahr“ und „Falsch“ verwendet, aber ich hätte alles verwenden können.
Zum Beispiel hätte ich stattdessen Folgendes tun können:
SELECT IIF( 1 < 2, 'Fail', 'Pass' );
Ergebnis:
Fail
Oder es könnte etwas sein, das vollständig von einer binären Antwort vom Typ „wahr“ oder „falsch“ entfernt ist.
Zum Beispiel:
SELECT IIF( 1 < 2, 'Deadlift', 'Bench Press' );
Ergebnis:
Deadlift
Testen einer Variablen
In der Praxis testen Sie normalerweise eher Variablen, Spalten usw. als Konstanten wie in den vorherigen Beispielen.
Hier ist ein Beispiel, das eine Variable testet.
DECLARE @bankBalance int = 123;
SELECT IIF(@bankBalance > 100, 'Rich!', 'Poor');
Ergebnis:
Rich!
Datenbankbeispiel
Hier ist ein Beispiel, das Spalten aus einer Datenbank verwendet.
SELECT TOP(10)
Name,
Population,
IIF(
Population > 400000,
'Big City',
'Small City'
) AS 'Big/Small'
FROM city;
Ergebnis:
+----------------+--------------+-------------+ | 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 | +----------------+--------------+-------------+
Verschachtelte IIF()-Funktionen
Hier ist ein Beispiel für die Verschachtelung eines IIF()
Funktion. Mit „Verschachteln“ meine ich, dass ich ein weiteres IIF()
übergebe Funktion als Argument für das äußere IIF()
Funktion.
DECLARE @bankBalance int = 123;
SELECT IIF(
@bankBalance > 100,
IIF(@bankBalance > 150, 'Rich!', 'Wealthy'),
'Poor'
);
Ergebnis:
Wealthy
Sie können IIF()
verschachteln funktioniert bis zu einem Level von 10.