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 |
---|---|
|
|
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 |
---|---|
|
|
|
|
|
|
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) |