2.1 CASE-uttalande

Det finns två sätt att skriva en sats i SQL CASE. Den första posten får det att se ut som att byta från Java-språket, medan det andra formatet är mer som plural if-else.

Låt oss börja med det första alternativet - en analog av switch. Det allmänna formatet är:

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

Verkligen väldigt lik switch, bara orden är något annorlunda:

SQL Java
fall x switch (x) {
när värde fallvärde:
sedan resultat returnera resultat;
annat resultat default: returnera resultat;
slutet }

Låt oss översätta ett exempel från Java till 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 Andra versionen av CASE-utlåtandet

Det finns också en andra version av operatorn , CASEsom, som nämnts ovan, är mer som plural if-else. Det allmänna formatet är:

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

Här kontrolleras villkoren helt enkelt sekventiellt, om något av dem är sant kommer det angivna resultatet att returneras. Om inget av villkoren är sant, då värdet som anges i ELSE.

Låt oss översätta ett exempel från Java till 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 med CASE-satsen

Låt oss skriva ner en intressant fråga. Kom ihåg att vi hade en uppgift - att lägga till ordet "Upphört!" till namnet på tidigare uppgifter i uppgiftstabellen . Det kan enkelt göras med CASE.

För deadline- fältet kommer det att se ut som den andra versionen av uttalandet CASE:


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

Ett exempel på en fullständig fråga som använder operatorn CASE:


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

Resultatet av denna fråga blir:

id emploee_id namn deadline
1 1 UTGÅNGET! Fixa en bugg på frontend 2022-06-01
2 2 Fixa en bugg på backend 2022-06-15
3 5 Köp kaffe 2022-07-01
4 5 Köp kaffe 2022-08-01
5 5 Köp kaffe 2022-09-01
6 (NULL) Städa kontoret (NULL)
7 4 Njut av livet (NULL)
8 6 Njut av livet (NULL)