2.1 Declarația CASE
Există două moduri de a scrie o instrucțiune în SQL CASE
. Prima intrare face să pară ca comutarea de la limbajul Java, în timp ce al doilea format este mai mult ca plural if-else
.
Să începem cu prima opțiune - un comutator analog. Formatul general este:
CASE case_value
WHEN value1 THEN result1
[WHEN value2 THEN result2] ...
[ELSE resultN]
END
Într-adevăr, foarte asemănător cu switch
, doar cuvintele sunt ușor diferite:
SQL | Java |
---|---|
cazul x | comutator (x) { |
când valoarea | valoarea cazului: |
apoi rezultat | returnează rezultatul; |
altfel rezultat | implicit: returnează rezultatul; |
Sfârşit | } |
Să traducem un exemplu din Java în SQL:
Java | SQL |
---|---|
|
|
2.2 A doua versiune a instrucțiunii CASE
Există, de asemenea, o a doua versiune a operatorului CASE
, care, după cum am menționat mai sus, seamănă mai mult cu pluralul if-else
. Formatul general este:
CASE
WHEN condition 1 THEN result1
[WHEN condition 2 THEN result2] ...
[ELSE resultN]
END
Aici, condițiile sunt pur și simplu verificate secvențial, dacă oricare dintre ele este adevărată, atunci rezultatul specificat va fi returnat. Dacă niciuna dintre condiții nu este adevărată, atunci valoarea specificată în ELSE
.
Să traducem un exemplu din Java în SQL:
Java | SQL |
---|---|
|
|
|
|
|
|
2.3 Rezolvați problema folosind instrucțiunea CASE
Să scriem o interogare interesantă. Amintiți-vă, aveam o sarcină - să adăugați cuvântul „EXPIRAT!” la numele sarcinilor anterioare din tabelul de sarcini . Se poate face cu ușurință cu CASE
.
Pentru câmpul termen limită , va arăta ca a doua versiune a declarației CASE
:
CASE
WHEN deadline < CURDATE() THEN CONCAT('EXPIRED!', name)
ELSE name
END
Un exemplu de interogare completă folosind operatorul CASE
:
SELECT
id,
emploee_id,
CASE WHEN deadline < CURDATE() THEN CONCAT('EXPIRED!', name) ELSE name END AS name,
deadline
FROM task
Rezultatul acestei interogări va fi:
id | Emploee_id | Nume | Termen limită |
---|---|---|---|
1 | 1 | EXPIRAT! Remediați o eroare pe front-end | 2022-06-01 |
2 | 2 | Remediați o eroare pe backend | 2022-06-15 |
3 | 5 | Cumpără cafea | 2022-07-01 |
4 | 5 | Cumpără cafea | 2022-08-01 |
5 | 5 | Cumpără cafea | 2022-09-01 |
6 | (NUL) | Curățați biroul | (NUL) |
7 | 4 | Bucură-te de viață | (NUL) |
8 | 6 | Bucură-te de viață | (NUL) |
GO TO FULL VERSION