Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Funktionsweise von IIF() in SQL Server

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.