- 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¶
Bedingung#
In der ersten Form von
CASE
ist jede Bedingung ein Ausdruck, der einen Wert von BOOLEAN (True, False oder NULL) auswerten soll.Ausdruck
Ein allgemeiner Ausdruck.
Wert
In der zweiten Form von
CASE
ist jederWert
eine potenzielle Übereinstimmung mitAusdruck
. DerWert
kann ein Literal oder ein Ausdruck sein. DerWert
muss vom gleichen Datentyp wieAusdruck
sein oder muss ein Datentyp sein, der in den Datentyp vonAusdruck
umgewandelt werden kann.Ergebnis#
Wenn in der ersten Form der
CASE
-Klausel dieBedingung#
erfüllt ist, gibt die Funktion das entsprechendeErgebnis#
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 derWert#
mitAusdruck
übereinstimmt, wird das entsprechendeErgebnis
zurückgegeben. Wenn mehr als einWert
mitAusdruck
übereinstimmt, wird dasErgebnis
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
.Bedingung#
,Ausdruck
,Wert
undErgebnis
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 Bedingung1
unabhängig von den Sortierungsspezifikationen in Bedingung2
, und diese Sortierungsspezifikationen müssen nicht identisch und nicht einmal 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 Wert1
und Wert2
mit der Sortierungsspezifikation von Ausdruck
kompatibel sein, aber die Sortierungsspezifikationen von Wert1
und Wert2
müssen nicht identisch sein oder mit der Sortierungsspezifikation von Ausdruck
ü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 | +------------------------------------------+