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
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 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
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 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)