2.1 Instruction CASE

Il existe deux manières d'écrire une instruction en SQL CASE. La première entrée ressemble à un changement du langage Java, tandis que le second format ressemble plus à plural if-else.

Commençons par la première option - un analogue de commutateur. Le format général est :

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

Vraiment très similaire à switch, seuls les mots sont légèrement différents :

SQL Java
cas x interrupteur (x) {
quand la valeur valeur de cas :
alors résultat retourner le résultat ;
sinon résultat par défaut : renvoie le résultat ;
fin }

Traduisons un exemple de Java en 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 Deuxième version de l'instruction CASE

Il existe également une deuxième version de l'opérateur CASE, qui, comme mentionné ci-dessus, ressemble plus à plural if-else. Le format général est :

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

Ici, les conditions sont simplement vérifiées séquentiellement, si l'une d'entre elles est vraie, alors le résultat spécifié sera renvoyé. Si aucune des conditions n'est vraie, alors la valeur spécifiée dans ELSE.

Traduisons un exemple de Java en 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 Résoudre le problème à l'aide de l'instruction CASE

Écrivons une requête intéressante. Rappelez-vous, nous avions une tâche - ajouter le mot "EXPIRÉ !" au nom des tâches passées dans le tableau des tâches . Cela peut être fait facilement avec le CASE.

Pour le champ date limite , il ressemblera à la deuxième version de la déclaration CASE:


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

Un exemple de requête complète utilisant l'opérateur CASE:


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

Le résultat de cette requête sera :

identifiant id_employé nom date limite
1 1 EXPIRÉ! Correction d'un bug sur le frontend 2022-06-01
2 2 Correction d'un bug sur le backend 2022-06-15
3 5 Acheter du café 2022-07-01
4 5 Acheter du café 2022-08-01
5 5 Acheter du café 2022-09-01
6 (NUL) Nettoyer le bureau (NUL)
7 4 Profite de la vie (NUL)
8 6 Profite de la vie (NUL)