2.1 CASE-verklaring
Er zijn twee manieren om een instructie in SQL te schrijven CASE
. Het eerste item laat het lijken op een overstap van de Java-taal, terwijl het tweede formaat meer op meervoud lijkt if-else
.
Laten we beginnen met de eerste optie - een analoog van schakelaar. De algemene indeling is:
CASE case_value
WHEN value1 THEN result1
[WHEN value2 THEN result2] ...
[ELSE resultN]
END
Echt erg vergelijkbaar met switch
, alleen de woorden zijn iets anders:
SQL | Java |
---|---|
geval x | schakelaar (x) { |
wanneer waarde | gevalwaarde: |
dan resultaat | resultaat retourneren; |
anders resultaat | standaard: retourresultaat; |
einde | } |
Laten we een voorbeeld van Java naar SQL vertalen:
Java | SQL |
---|---|
|
|
2.2 Tweede versie van de CASE-verklaring
Er is ook een tweede versie van de operator CASE
, die, zoals hierboven vermeld, meer op meervoud lijkt if-else
. De algemene indeling is:
CASE
WHEN condition 1 THEN result1
[WHEN condition 2 THEN result2] ...
[ELSE resultN]
END
Hier worden de voorwaarden eenvoudig opeenvolgend gecontroleerd, als een van deze waar is, wordt het opgegeven resultaat geretourneerd. Als geen van de voorwaarden waar is, wordt de waarde die is opgegeven in ELSE
.
Laten we een voorbeeld van Java naar SQL vertalen:
Java | SQL |
---|---|
|
|
|
|
|
|
2.3 Los het probleem op met behulp van de CASE-instructie
Laten we een interessante vraag opschrijven. Vergeet niet dat we een taak hadden - om het woord "VERLOPEN!" naar de naam van taken uit het verleden in de taaktabel . Dat kan eenvoudig met de CASE
.
Voor het veld deadline ziet het eruit als de tweede versie van de verklaring CASE
:
CASE
WHEN deadline < CURDATE() THEN CONCAT('EXPIRED!', name)
ELSE name
END
Een voorbeeld van een volledige zoekopdracht met de operator CASE
:
SELECT
id,
emploee_id,
CASE WHEN deadline < CURDATE() THEN CONCAT('EXPIRED!', name) ELSE name END AS name,
deadline
FROM task
Het resultaat van deze query zal zijn:
ID kaart | medewerker_id | naam | deadline |
---|---|---|---|
1 | 1 | VERLOPEN! Los een bug op de frontend op | 01-06-2022 |
2 | 2 | Los een bug op de backend op | 2022-06-15 |
3 | 5 | Koop koffie | 01-07-2022 |
4 | 5 | Koop koffie | 01-08-2022 |
5 | 5 | Koop koffie | 01-09-2022 |
6 | (NUL) | Ruim het kantoor op | (NUL) |
7 | 4 | Geniet van het leven | (NUL) |
8 | 6 | Geniet van het leven | (NUL) |
GO TO FULL VERSION