2.1 CASE-uttalande
Det finns två sätt att skriva en sats i SQL CASE
. Den första posten får det att se ut som att byta från Java-språket, medan det andra formatet är mer som plural if-else
.
Låt oss börja med det första alternativet - en analog av switch. Det allmänna formatet är:
CASE case_value
WHEN value1 THEN result1
[WHEN value2 THEN result2] ...
[ELSE resultN]
END
Verkligen väldigt lik switch
, bara orden är något annorlunda:
SQL | Java |
---|---|
fall x | switch (x) { |
när värde | fallvärde: |
sedan resultat | returnera resultat; |
annat resultat | default: returnera resultat; |
slutet | } |
Låt oss översätta ett exempel från Java till SQL:
Java | SQL |
---|---|
|
|
2.2 Andra versionen av CASE-utlåtandet
Det finns också en andra version av operatorn , CASE
som, som nämnts ovan, är mer som plural if-else
. Det allmänna formatet är:
CASE
WHEN condition 1 THEN result1
[WHEN condition 2 THEN result2] ...
[ELSE resultN]
END
Här kontrolleras villkoren helt enkelt sekventiellt, om något av dem är sant kommer det angivna resultatet att returneras. Om inget av villkoren är sant, då värdet som anges i ELSE
.
Låt oss översätta ett exempel från Java till SQL:
Java | SQL |
---|---|
|
|
|
|
|
|
2.3 Lös problemet med CASE-satsen
Låt oss skriva ner en intressant fråga. Kom ihåg att vi hade en uppgift - att lägga till ordet "Upphört!" till namnet på tidigare uppgifter i uppgiftstabellen . Det kan enkelt göras med CASE
.
För deadline- fältet kommer det att se ut som den andra versionen av uttalandet CASE
:
CASE
WHEN deadline < CURDATE() THEN CONCAT('EXPIRED!', name)
ELSE name
END
Ett exempel på en fullständig fråga som använder operatorn CASE
:
SELECT
id,
emploee_id,
CASE WHEN deadline < CURDATE() THEN CONCAT('EXPIRED!', name) ELSE name END AS name,
deadline
FROM task
Resultatet av denna fråga blir:
id | emploee_id | namn | deadline |
---|---|---|---|
1 | 1 | UTGÅNGET! Fixa en bugg på frontend | 2022-06-01 |
2 | 2 | Fixa en bugg på backend | 2022-06-15 |
3 | 5 | Köp kaffe | 2022-07-01 |
4 | 5 | Köp kaffe | 2022-08-01 |
5 | 5 | Köp kaffe | 2022-09-01 |
6 | (NULL) | Städa kontoret | (NULL) |
7 | 4 | Njut av livet | (NULL) |
8 | 6 | Njut av livet | (NULL) |