2.1 Dichiarazione CASE

Ci sono due modi per scrivere un'istruzione in SQL CASE. La prima voce lo fa sembrare un passaggio dal linguaggio Java, mentre il secondo formato è più simile al plurale if-else.

Cominciamo con la prima opzione: un analogo di switch. Il formato generale è:

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

Davvero molto simile a switch, solo le parole sono leggermente diverse:

SQL Giava
caso x cambia (x) {
quando valore valore del caso:
quindi risultato risultato di ritorno;
altro risultato default: restituisce il risultato;
FINE }

Traduciamo un esempio da Java in SQL:

Giava 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 Seconda versione dell'istruzione CASE

Esiste anche una seconda versione dell'operatore CASE, che, come accennato in precedenza, è più simile al plurale if-else. Il formato generale è:

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

Qui, le condizioni vengono semplicemente verificate in sequenza, se una di esse è vera, verrà restituito il risultato specificato. Se nessuna delle condizioni è vera, il valore specificato in ELSE.

Traduciamo un esempio da Java in SQL:

Giava 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 Risolvere il problema utilizzando l'istruzione CASE

Scriviamo qualche domanda interessante. Ricorda, avevamo un compito: aggiungere la parola "SCADUTO!" al nome delle attività passate nella tabella delle attività . Può essere fatto facilmente con il CASE.

Per il campo scadenza , sembrerà la seconda versione della dichiarazione CASE:


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

Un esempio di una query completa utilizzando l'operatore CASE:


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

Il risultato di questa query sarà:

id impiegato_id nome scadenza
1 1 SCADUTO! Risolto un bug sul frontend 2022-06-01
2 2 Risolto un bug sul backend 2022-06-15
3 5 Compra il caffè 2022-07-01
4 5 Compra il caffè 2022-08-01
5 5 Compra il caffè 2022-09-01
6 (NULLO) Pulisci l'ufficio (NULLO)
7 4 Goditi la vita (NULLO)
8 6 Goditi la vita (NULLO)