- Kategorien:
CASE¶
Funktioniert wie eine kaskadierende „if-then-else“-Anweisung. In der allgemeineren Form wird eine Reihe von Bedingungen nacheinander ausgewertet. Wenn eine Bedingung zu TRUE ausgewertet wird, stoppt die Auswertung und wird das zugehörige Ergebnis (nach THEN) zurückgegeben. Wenn keine der Bedingungen zu TRUE ausgewertet wird, wird das Ergebnis nach dem optionalen ELSE zurückgegeben (sofern vorhanden); andernfalls wird NULL zurückgegeben.
In der zweiten „Abkürzungsform“ wird der Ausdruck nach CASE mit jedem der WHEN-Ausdrücke in der Reihenfolge verglichen, bis einer übereinstimmt; dann wird das zugehörige Ergebnis (nach THEN) zurückgegeben. Wenn keiner der Ausdrücke übereinstimmt, wird das Ergebnis nach dem optionalen ELSE zurückgegeben, sofern vorhanden, andernfalls wird NULL zurückgegeben.
Beachten Sie, dass in der zweiten Form ein NULL CASE-Ausdruck mit keinem der WHEN-Ausdrücke übereinstimmt, auch wenn einer der WHEN-Ausdrücke ebenfalls NULL ist.
- Siehe auch::
Syntax¶
CASE
WHEN <condition1> THEN <result1>
[ WHEN <condition2> THEN <result2> ]
[ ... ]
[ ELSE <result3> ]
END
CASE <expr>
WHEN <value1> THEN <result1>
[ WHEN <value2> THEN <result2> ]
[ ... ]
[ ELSE <result3> ]
END
Argumente¶
condition#
In der ersten Form von
CASE
ist jede Bedingung ein Ausdruck, der einen Wert von BOOLEAN (True, False oder NULL) auswerten soll.expr
Ein allgemeiner Ausdruck.
value
In der zweiten Form von
CASE
ist jedervalue
-Wert eine potenzielle Übereinstimmung mit demexpr
-Wert. Dervalue
kann ein Literal oder ein Ausdruck sein. Dervalue
-Wert muss vom gleichen Datentyp wie derexpr
-Wert sein oder muss ein Datentyp sein, der in den Datentyp desexpr
-Werts umgewandelt werden kann.result#
Wenn in der ersten Form der
CASE
-Klausel dercondition#
-Wert „true“ ergibt, gibt die Funktion den entsprechendenresult#
-Wert zurück. Wenn mehr als eine Bedingung wahr ist, wird das mit der ersten wahr-Bedingung verknüpfte Ergebnis zurückgegeben.Wenn in der zweiten Form der
CASE
-Anweisung dervalue#
-Wert mit demexpr
-Wert übereinstimmt, wird der entsprechenderesult
-Wert zurückgegeben. Wenn mehr als einvalue
-Wert mit demexpr
-Wert übereinstimmt, wird derresult
-Wert des ersten übereinstimmenden Werts zurückgegeben.Das Ergebnis sollte ein Ausdruck sein, der einen einzelnen Wert ergibt.
Wenn in beiden Formen von
CASE
eine optionaleELSE
-Klausel vorhanden ist und keine Übereinstimmungen gefunden werden, gibt die Funktion das Ergebnis in derELSE
-Klausel zurück. Wenn keineELSE
-Klausel vorhanden ist und keine Übereinstimmungen gefunden werden, lautet das Ergebnis NULL.
Nutzungshinweise¶
Beachten Sie, dass im Gegensatz zu DECODE ein NULL-Wert in der Bedingung nicht mit einem NULL-Wert an anderer Stelle in der Bedingung übereinstimmt. So gibt zum Beispiel
WHEN <Null-Ausdruck> = NULL THEN 'Return me!'
nicht „Return me!“ zurück. Wenn Sie einen Vergleich mit NULL-Werten möchten, verwenden SieIS NULL
anstelle von= NULL
.Die Werte von
condition#
,expr
,value
undresult
können allgemeine Ausdrücke sein und daher Unterabfragen mit Mengenoperatoren wieUNION
,INTERSECT
,EXCEPT
undMINUS
enthalten. 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¶
In der ersten Form von CASE
ist jeder Ausdruck unabhängig, und die Sortierungsspezifikationen in verschiedenen Zweigen sind unabhängig. Beispielsweise sind im Folgenden die Sortierungsspezifikationen in condition1
unabhängig von den Sortierungsspezifikationen in condition2
, und diese Sortierungsspezifikationen müssen nicht identisch und auch nicht kompatibel sein.
CASE
WHEN <condition1> THEN <result1>
[ WHEN <condition2> THEN <result2> ]
In der zweiten Form von CASE
müssen zwar für alle sortierungsbezogenen Operationen kompatible Sortierungsspezifikationen verwendet werden, die Sortierungsspezifikationen müssen jedoch nicht identisch sein. In der folgenden Anweisung beispielsweise müssen die Sortierungsspezifikationen von value1
und value2
mit der Sortierungsspezifikation von expr
kompatibel sein, aber die Sortierungsspezifikationen von value1
und value2
müssen nicht identisch sein oder mit der Sortierungsspezifikation von expr
übereinstimmen.
CASE <expr> WHEN <value1> THEN <result1> [ WHEN <value2> THEN <result2> ] ...
Der von der Funktion zurückgegebene Wert hat die Sortierung mit der höchsten Priorität der THEN
/ELSE
-Argumente.
Beispiele¶
Dies zeigt eine typische Verwendung von CASE
:
SELECT column1, CASE WHEN column1=1 THEN 'one' WHEN column1=2 THEN 'two' ELSE 'other' END AS result FROM (values(1),(2),(3)) v;Ausgabe:
+---------+--------+ | COLUMN1 | RESULT | |---------+--------| | 1 | one | | 2 | two | | 3 | other | +---------+--------+
Dies zeigt, dass, wenn keiner der Werte übereinstimmt und keine ELSE
-Klausel vorhanden ist, der zurückgegebene Wert NULL ist:
SELECT column1, CASE WHEN column1=1 THEN 'one' WHEN column1=2 THEN 'two' END AS result FROM (values(1),(2),(3)) v;Ausgabe:
+---------+--------+ | COLUMN1 | RESULT | |---------+--------| | 1 | one | | 2 | two | | 3 | NULL | +---------+--------+
In diesem Beispiel wird NULL explizit behandelt.
SELECT column1, CASE WHEN column1 = 1 THEN 'one' WHEN column1 = 2 THEN 'two' WHEN column1 IS NULL THEN 'NULL' ELSE 'other' END AS result FROM VALUES (1), (2), (NULL);Ausgabe:
+---------+--------+ | COLUMN1 | RESULT | |---------+--------| | 1 | one | | 2 | two | | NULL | NULL | +---------+--------+
Das folgende Beispiel kombiniert CASE
mit Sortierung:
SELECT CASE COLLATE('m', 'upper') WHEN 'M' THEN TRUE ELSE FALSE END; +----------------------------+ | CASE COLLATE('M', 'UPPER') | | WHEN 'M' THEN TRUE | | ELSE FALSE | | END | |----------------------------| | True | +----------------------------+ SELECT CASE 'm' WHEN COLLATE('M', 'lower') THEN TRUE ELSE FALSE END; +------------------------------------------+ | CASE 'M' | | WHEN COLLATE('M', 'LOWER') THEN TRUE | | ELSE FALSE | | END | |------------------------------------------| | True | +------------------------------------------+