SQLite
 sql >> Datenbank >  >> RDS >> SQLite

Wie iif() in SQLite funktioniert

In SQLite iif() ist eine bedingte Funktion, die das zweite oder dritte Argument basierend auf der Auswertung des ersten Arguments zurückgibt.

Es ist logisch äquivalent zu CASE WHEN X THEN Y ELSE Z END .

iif() ist eine Abkürzung für Immediate IF .

Das iif() Funktion wurde in SQLite 3.32.0 eingeführt, das am 22. Mai 2020 veröffentlicht wurde.

Syntax

Die Syntax lautet wie folgt:

iif(X,Y,Z)

Wo:

  • X ist der auszuwertende Ausdruck.
  • Ja definiert, was bei der Auswertung von X zurückgegeben wird gibt true zurück.
  • Z definiert, was bei der Auswertung von X zurückgegeben wird gibt false zurück.

Man kann sich das auch so vorstellen:

iif(expr, truepart, falsepart)

Beispiel

Hier ist ein einfaches Beispiel, um zu demonstrieren, wie iif() funktioniert.

SELECT iif( 1 < 2, "True", "False" );

Ergebnis:

True

In diesem Fall war 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, "Sticky Rice", "Banana Smoothie" );

Ergebnis:

Sticky Rice

Datenbankbeispiel

Hier ist ein Beispiel, das Spalten aus einer Datenbank verwendet.

SELECT 
  ProductName,
  Qty,
  iif( Qty < 10, "Order more", "Sufficient stock" ) AS Notes
FROM Products;

Ergebnis:

ProductName  Qty         Notes           
-----------  ----------  ----------------
Hammer       10          Sufficient stock
Saw          5           Order more      
Wrench       7           Order more      
Chisel       9           Order more      
Bandage      70          Sufficient stock