CASE
value
WHEN
[compare_value
] THEN
result
[WHEN
[compare_value
] THEN
result
...] [ELSE
result
] END
CASE WHEN [
condition
] THEN
result
[WHEN
[condition
] THEN
result
...] [ELSE
result
] END
Die erste Version gibt result
zurück, wobei gilt:
.
Die zweite Version gibt das Ergebnis der ersten Bedingung
zurück, die wahr ist. Wenn kein passender Ergebniswert
existiert, wird das Ergebnis nach value
=compare_value
ELSE
oder
aber NULL
(sofern kein
ELSE
-Teil vorhanden ist) zurückgegeben.
mysql>SELECT CASE 1 WHEN 1 THEN 'one'
->WHEN 2 THEN 'two' ELSE 'more' END;
-> 'one' mysql>SELECT CASE WHEN 1>0 THEN 'true' ELSE 'false' END;
-> 'true' mysql>SELECT CASE BINARY 'B'
->WHEN 'a' THEN 1 WHEN 'b' THEN 2 END;
-> NULL
Der vorgabeseitige Rückgabetyp eines
CASE
-Ausdrucks ist der kompatible
zusammengefasste Typ aller Rückgabewerte, hängt aber auch
vom Kontext ab, in dem er verwendet wird. Bei Verwendung in
einem String-Kontext wird das Ergebnis als String
zurückgegeben. Bei Verwendung in einem numerischen Kontext
wird das Ergebnis als Dezimalwert, reale Zahl oder
Integer-Wert zurückgegeben.
Hinweis: Die hier gezeigte
Syntax des
CASE
-Ausdrucks
unterscheidet sich ein wenig von der SQL-Syntax der
CASE
-Anweisung, wie
sie in Abschnitt 19.2.10.2, „CASE
-Anweisung“, zur Verwendung in
gespeicherten Routinen beschrieben wird. Die
CASE
-Anweisung kann keine ELSE
NULL
-Klausel haben und wird mit END
CASE
anstelle von END
abgeschlossen.
Wenn expr1
TRUE
ist (
und expr1
<>
0
), dann gibt expr1
<> NULLIF()
expr2
zurück; andernfalls gibt es
expr3
zurück.
IF()
gibt je nach Verwendungskontext einen
numerischen oder einen String-Wert zurück.
mysql>SELECT IF(1>2,2,3);
-> 3 mysql>SELECT IF(1<2,'yes','no');
-> 'yes' mysql>SELECT IF(STRCMP('test','test1'),'no','yes');
-> 'no'
Ist nur einer der Ausdrücke expr2
oder expr3
explizit
NULL
, dann ist der Ergebnistyp der
IF()
-Funktion der Typ des
Nicht-NULL
-Ausdrucks.
expr1
wird als Integer-Wert
ausgewertet, d. h., wenn Sie Fließkomma- oder String-Werte
prüfen, sollten Sie dies mit einer Vergleichsoperation tun.
mysql>SELECT IF(0.1,1,0);
-> 0 mysql>SELECT IF(0.1<>0,1,0);
-> 1
Im ersten gezeigten Fall gibt IF(0.1)
0
zurück, weil 0.1
in
einen Integer-Wert konvertiert wird, was zur Prüfung von
IF(0)
führt. Dies ist unter Umständen
nicht das, was Sie erwarten. Im zweiten Fall prüft der
Vergleich den ursprünglichen Fließkommawert, um
festzustellen, ob dieser nicht null ist. Das Ergebnis des
Vergleichs wird als Integer verwendet.
Der Standardrückgabetyp von IF()
(der
wichtig sein kann, wenn er in einer Temporärtabelle
gespeichert wird) wird wie folgt berechnet:
Ausdruck | Rückgabewert |
expr2 oder expr3
gibt einen String zurück |
String |
expr2 oder expr3
gibt einen Fließkommawert zurück |
Fließkommazahl |
expr2 oder expr3
gibt einen Integer zurück |
Integer |
Wenn sowohl expr2
als auch
expr3
Strings sind, wird beim
Ergebnis die Groß-/Kleinschreibung unterschieden, sofern dies
bei einem der Strings ebenfalls der Fall ist.
Hinweis: Es gibt auch eine
IF
-Anweisung, die sich
von der hier beschriebenen
IF()
-Funktion
unterscheidet. Siehe auch Abschnitt 19.2.10.1, „IF
-Anweisung“.
Wenn expr1
nicht
NULL
ist, gibt IFNULL()
expr1
zurück; andernfalls wird
expr2
zurückgegeben.
IFNULL()
gibt je nach Verwendungskontext
einen numerischen oder einen String-Wert zurück.
mysql>SELECT IFNULL(1,0);
-> 1 mysql>SELECT IFNULL(NULL,10);
-> 10 mysql>SELECT IFNULL(1/0,10);
-> 10 mysql>SELECT IFNULL(1/0,'yes');
-> 'yes'
Der Standardergebniswert von
IFNULL(
ist der „allgemeinere“ der beiden Ausdrücke in
der Reihenfolge expr1
,expr2
)STRING
,
REAL
oder INTEGER
.
Betrachten Sie den Fall einer auf Ausdrücken basierenden
Tabelle oder einen Fall, in dem MySQL einen von
IFNULL()
zurückgegebenen Wert intern in
einer Temporärtabelle speichern muss:
mysql>CREATE TABLE tmp SELECT IFNULL(1,'test') AS test;
mysql>DESCRIBE tmp;
+-------+--------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+--------------+------+-----+---------+-------+ | test | varbinary(4) | | | | | +-------+--------------+------+-----+---------+-------+
In diesem Beispiel ist der Typ der Spalte
test
CHAR(4)
.
Gibt NULL
zurück, wenn
wahr ist;
andernfalls wird expr1
=
expr2
expr1
zurückgegeben. Dies ist das Gleiche wie CASE WHEN
.
expr1
=
expr2
THEN NULL ELSE
expr1
END
mysql>SELECT NULLIF(1,1);
-> NULL mysql>SELECT NULLIF(1,2);
-> 1
Beachten Sie, dass MySQL expr1
zweimal auswertet, wenn die Argumente nicht gleich sind.
Dies ist eine Übersetzung des MySQL-Referenzhandbuchs, das sich auf dev.mysql.com befindet. Das ursprüngliche Referenzhandbuch ist auf Englisch, und diese Übersetzung ist nicht notwendigerweise so aktuell wie die englische Ausgabe. Das vorliegende deutschsprachige Handbuch behandelt MySQL bis zur Version 5.1.