2.1 CASE-Anweisung

Es gibt zwei Möglichkeiten, eine Anweisung in SQL zu schreiben CASE. Der erste Eintrag lässt es wie einen Wechsel von der Java-Sprache aussehen, während das zweite Format eher einem Plural ähnelt if-else.

Beginnen wir mit der ersten Option – einem Analogon von switch. Das allgemeine Format ist:

CASE case_value
	WHEN value1 THEN result1
	[WHEN value2 THEN result2] ...
	[ELSE resultN]
END

Wirklich sehr ähnlich zu switch, nur die Wörter sind etwas anders:

SQL Java
Fall x Schalter (x) {
wenn Wert Fallwert:
dann Ergebnis Ergebnis zurückgeben;
sonst Ergebnis Standard: Ergebnis zurückgeben;
Ende }

Lassen Sie uns ein Beispiel von Java in SQL übersetzen:

Java SQL
switch (a) {
   case 1: return "one";
   case 2: return "two";
   case 3: return "three";
   default: return "unknown";
}
CASE a
   WHEN 1 THEN 'one'
   WHEN 2 THEN 'two'
   WHEN 3 THEN 'three'
   ELSE 'unknown'
END

2.2 Zweite Version der CASE-Anweisung

Es gibt auch eine zweite Version des Operators CASE, die, wie oben erwähnt, eher dem Plural ähnelt if-else. Das allgemeine Format ist:

CASE
	WHEN condition 1 THEN result1
	[WHEN condition 2 THEN result2] ...
	[ELSE resultN]
END

Hier werden die Bedingungen einfach nacheinander überprüft. Wenn eine davon wahr ist, wird das angegebene Ergebnis zurückgegeben. Wenn keine der Bedingungen zutrifft, wird der in angegebene Wert verwendet ELSE.

Lassen Sie uns ein Beispiel von Java in SQL übersetzen:

Java SQL
if (a == 3)
	return "three";
CASE
   WHEN a=3 THEN 'three'
END
if (a == 3)
	return "three";
else
	return "zero";
CASE
   WHEN a=3 THEN 'three'
   ELSE 'zero'
END
if (a == 1)
	return "three";
else if (a == 2)
	return "two";
else if (a == 3)
	return "three";
else
	return "zero";
CASE
   WHEN a=1 THEN 'one'
   WHEN a=2 THEN 'two'
   WHEN a=3 THEN 'three'
   ELSE 'zero'
END

2.3 Lösen Sie das Problem mit der CASE-Anweisung

Schreiben wir eine interessante Frage auf. Denken Sie daran, wir hatten die Aufgabe, das Wort „ABGELAUFEN!“ hinzuzufügen. zum Namen vergangener Aufgaben in der Aufgabentabelle . Das geht ganz einfach mit dem CASE.

Für das Deadline- Feld sieht es wie in der zweiten Version der Anweisung aus CASE:


CASE
	WHEN deadline < CURDATE() THEN CONCAT('EXPIRED!', name)
	ELSE name
END
        

Ein Beispiel für eine vollständige Abfrage mit dem Operator CASE:


SELECT
    id,
    emploee_id,
    CASE WHEN deadline < CURDATE() THEN CONCAT('EXPIRED!', name) ELSE name END AS name,
    deadline         	
FROM task
        

Das Ergebnis dieser Abfrage wird sein:

Ausweis emploee_id Name Termin
1 1 ABGELAUFEN! Beheben Sie einen Fehler im Frontend 01.06.2022
2 2 Beheben Sie einen Fehler im Backend 15.06.2022
3 5 Kaffee kaufen 01.07.2022
4 5 Kaffee kaufen 01.08.2022
5 5 Kaffee kaufen 01.09.2022
6 (NULL) Räumen Sie das Büro auf (NULL)
7 4 Das Leben genießen (NULL)
8 6 Das Leben genießen (NULL)