9.13.1. CASE

Der SQL CASE-Ausdruck ist ein allgemeiner bedingter Ausdruck, ähnlich den if/else-Anweisungen in anderen Sprachen:

CASE WHEN condition THEN result END

CASE-Klauseln können überall dort verwendet werden, wo ein Ausdruck gültig ist. condition ist ein Ausdruck, der ein boolesches Ergebnis liefert. Wenn das Ergebnis wahr ist, ist der Wert des CASE-Ausdrucks das Ergebnis, das auf die Bedingung folgt. Wenn das Ergebnis falsch ist, werden alle nachfolgenden WHEN-Klauseln auf die gleiche Weise durchsucht. Wenn keine WHEN-Bedingung wahr ist, ist der Wert des CASE-Ausdrucks das Ergebnis in der ELSE-Klausel. Wenn die ELSE-Klausel weggelassen wird und keine Bedingung zutrifft, ist das Ergebnis null.

Ein Beispiel:

SELECT * FROM test; a--- 1 2 3SELECT a, CASE WHEN a=1 THEN 'one' WHEN a=2 THEN 'two' ELSE 'other' END FROM test; a | case---+------- 1 | one 2 | two 3 | other

Die Datentypen aller Ergebnisausdrücke müssen in einen einzigen Ausgabetyp konvertierbar sein. Weitere Einzelheiten finden Sie in Abschnitt 10.5.

Der folgende „einfache“ CASE-Ausdruck ist eine spezialisierte Variante der obigen allgemeinen Form:

CASE expression WHEN value THEN result END

Der Ausdruck wird berechnet und mit allen Wertangaben in den WHEN-Klauseln verglichen, bis eine gefunden wird, die gleich ist. Wenn keine Übereinstimmung gefunden wird, wird das Ergebnis in der ELSE-Klausel (oder ein Nullwert) zurückgegeben. Dies ähnelt der switch-Anweisung in C.

Das obige Beispiel kann mit der einfachen CASE-Syntax geschrieben werden:

SELECT a, CASE a WHEN 1 THEN 'one' WHEN 2 THEN 'two' ELSE 'other' END FROM test; a | case---+------- 1 | one 2 | two 3 | other

Ein CASE-Ausdruck wertet keine Unterausdrücke aus, die nicht zur Ermittlung des Ergebnisses benötigt werden. Dies ist beispielsweise eine Möglichkeit, einen Fehler bei der Division durch Null zu vermeiden:

SELECT ... WHERE CASE WHEN x <> 0 THEN y/x > 1.5 ELSE false END;

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.