2.1 CASE-udtalelse

Der er to måder at skrive en sætning i SQL CASE. Den første post får det til at ligne et skifte fra Java-sproget, mens det andet format er mere som flertal if-else.

Lad os starte med den første mulighed - en analog af switch. Det generelle format er:

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

Virkelig meget lig switch, kun ordene er lidt forskellige:

SQL Java
tilfælde x switch (x) {
når værdi case værdi:
derefter resultat returnere resultat;
andet resultat default: returner resultat;
ende }

Lad os oversætte 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 Anden version af CASE-erklæringen

Der er også en anden version af operatoren CASE, der, som nævnt ovenfor, mere ligner flertal if-else. Det generelle format er:

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

Her kontrolleres betingelserne blot sekventielt, hvis nogen af ​​dem er sande, vil det angivne resultat blive returneret. Hvis ingen af ​​betingelserne er sande, er værdien angivet i ELSE.

Lad os oversætte 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 hjælp af CASE-sætningen

Lad os skrive en interessant forespørgsel ned. Husk, vi havde en opgave - at tilføje ordet "UDLØB!" til navnet på tidligere opgaver i opgavetabellen . Det kan nemt gøres med CASE.

For deadline- feltet vil det se ud som den anden version af erklæringen CASE:


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

Et eksempel på en komplet forespørgsel, der bruger operatoren CASE:


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

Resultatet af denne forespørgsel vil være:

id emploee_id navn deadline
1 1 UDLØB! Ret en fejl på frontend 2022-06-01
2 2 Ret en fejl på backend 2022-06-15
3 5 Køb kaffe 2022-07-01
4 5 Køb kaffe 2022-08-01
5 5 Køb kaffe 2022-09-01
6 (NUL) Ryd op på kontoret (NUL)
7 4 Nyd livet (NUL)
8 6 Nyd livet (NUL)