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;