Dichiarazione CASE

Disponibile

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)
Commenti
  • Popolari
  • Nuovi
  • Vecchi
Devi avere effettuato l'accesso per lasciare un commento
Questa pagina non ha ancora commenti