Kategorien:

Funktionen für bedingte Ausdrücke

IFF

Gibt einen von zwei Werten zurück, je nachdem, ob ein boolescher Ausdruck „true“ oder „false“ ergibt. Diese Funktion ist vergleichbar mit einem einstufigen if-then-else-Ausdruck. Sie ist ähnlich wie CASE, erlaubt jedoch nur eine einzige Bedingung. Sie können damit bedingte Logik zu SQL-Anweisungen hinzufügen.

Syntax

IFF( <condition> , <expr1> , <expr2> )
Copy

Argumente

condition

Die Bedingung ist ein Ausdruck, der einen BOOLEAN-Wert (TRUE, FALSE oder NULL) ergibt.

Wenn die Bedingung condition den Wert TRUE ergibt, wird expr1 zurückgegeben, andernfalls wird expr2 zurückgegeben.

expr1

Ein allgemeiner Ausdruck. Dieser Wert wird zurückgegeben, wenn die Bedingung condition erfüllt ist.

expr2

Ein allgemeiner Ausdruck. Dieser Wert wird zurückgegeben, wenn condition nicht erfüllt wird (d. h. „false“ oder NULL ist).

Rückgabewerte

Diese Funktion gibt einen Wert vom Datentyp VARCHAR zurück.

Nutzungshinweise

  • Die Bedingung condition kann eine SELECT-Anweisung enthalten, die wiederum Mengenoperatoren enthält, z. B. UNION, INTERSECT, EXCEPT und MINUS. Stellen Sie bei der Verwendung von Mengenoperatoren sicher, dass die Datentypen kompatibel sind. Weitere Informationen dazu finden Sie unter Allgemeine Nutzungshinweise unter dem Thema Mengenoperatoren.

Sortierungsdetails

Der von der Funktion zurückgegebene Wert behält die Sortierungsspezifikation der Sortierung mit der höchsten Präferenz der Argumente expr1 und expr2 bei.

Beispiele

Die folgenden Beispiele verwenden die Funktion IFF.

Rückgabe von expr1, da die Bedingung wahr („true“) ergibt:

SELECT IFF(TRUE, 'true', 'false');
Copy
+----------------------------+
| IFF(TRUE, 'TRUE', 'FALSE') |
|----------------------------|
| true                       |
+----------------------------+

Rückgabe von expr2, da die Bedingung falsch („false“) ergibt:

SELECT IFF(FALSE, 'true', 'false');
Copy
+-----------------------------+
| IFF(FALSE, 'TRUE', 'FALSE') |
|-----------------------------|
| false                       |
+-----------------------------+

Rückgabe von expr2, da die Bedingung NULL ergibt:

SELECT IFF(NULL, 'true', 'false');
Copy
+----------------------------+
| IFF(NULL, 'TRUE', 'FALSE') |
|----------------------------|
| false                      |
+----------------------------+

Rückgabe von expr1 (integer), wenn der Wert eine Ganzzahl ist, oder expr2 (non-integer), wenn der Wert keine Ganzzahl ist:

SELECT value, IFF(value::INT = value, 'integer', 'non-integer')
  FROM ( SELECT column1 AS value
           FROM VALUES(1.0), (1.1), (-3.1415), (-5.000), (NULL) )
  ORDER BY value DESC;
Copy
+---------+---------------------------------------------------+
|   VALUE | IFF(VALUE::INT = VALUE, 'INTEGER', 'NON-INTEGER') |
|---------+---------------------------------------------------|
|    NULL | non-integer                                       |
|  1.1000 | non-integer                                       |
|  1.0000 | integer                                           |
| -3.1415 | non-integer                                       |
| -5.0000 | integer                                           |
+---------+---------------------------------------------------+

Rückgabe von expr1 (High), wenn der Wert größer als 50 ist, oder expr2 (Low), wenn der Wert 50 oder kleiner ist (oder NULL):

SELECT value, IFF(value > 50, 'High', 'Low')
FROM ( SELECT column1 AS value
         FROM VALUES(22), (63), (5), (99), (NULL) );
Copy
+-------+--------------------------------+
| VALUE | IFF(VALUE > 50, 'HIGH', 'LOW') |
|-------+--------------------------------|
|    22 | Low                            |
|    63 | High                           |
|     5 | Low                            |
|    99 | High                           |
|  NULL | Low                            |
+-------+--------------------------------+