2.1 SAKSUTTALING

Det er to måter å skrive en setning i SQL CASE. Den første oppføringen får det til å se ut som bytte fra Java-språket, mens det andre formatet er mer som flertall if-else.

La oss starte med det første alternativet - en analog av bryteren. Det generelle formatet er:

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

Virkelig veldig lik switch, bare ordene er litt forskjellige:

SQL Java
tilfelle x bryter (x) {
når verdi saksverdi:
deretter resultat returnere resultat;
annet resultat standard: returner resultat;
slutt }

La oss oversette et eksempel fra Java til 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 Andre versjon av CASE-uttalelsen

Det er også en andre versjon av operatoren CASE, som, som nevnt ovenfor, er mer som flertall if-else. Det generelle formatet er:

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

Her blir betingelsene ganske enkelt sjekket sekvensielt, hvis noen av dem er sanne, vil det angitte resultatet bli returnert. Hvis ingen av betingelsene er sanne, vil verdien spesifisert i ELSE.

La oss oversette et eksempel fra Java til 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 Løs problemet ved å bruke CASE-setningen

La oss skrive ned noen interessante spørsmål. Husk at vi hadde en oppgave - å legge til ordet "UTLØPT!" til navnet på tidligere oppgaver i oppgavetabellen . Det kan enkelt gjøres med CASE.

For fristfeltet vil det se ut som den andre versjonen av erklæringen CASE:


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

Et eksempel på en fullstendig spørring som bruker operatøren CASE:


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

Resultatet av denne spørringen vil være:

id emploee_id Navn frist
1 1 UTLØPT! Rett opp en feil på frontend 2022-06-01
2 2 Rett opp en feil på backend 2022-06-15
3 5 Kjøp kaffe 2022-07-01
4 5 Kjøp kaffe 2022-08-01
5 5 Kjøp kaffe 2022-09-01
6 (NULL) Rydd opp på kontoret (NULL)
7 4 Nyt livet (NULL)
8 6 Nyt livet (NULL)