Je sais que la syntaxe CASE
de SQL est la suivante:
CASE
WHEN search_condition THEN statement_list
[WHEN search_condition THEN statement_list] ...
[ELSE statement_list]
END CASE
Cependant, je ne comprends pas comment cela fonctionne, peut-être parce que je le considère comme une déclaration if
.
Si j'ai un champ dans la table user_role
, par exemple, qui contient des noms tels que "Gestionnaire", "Temps partiel", etc., comment générer un champ role_order
avec un numéro différent en fonction du rôle Dans le cas de cet exemple, "si user_role = 'Manager' alors role_order = 5".
Veuillez noter que je recherche un enseigne à un homme comment pêcher répond plutôt que donne un poisson à un homme réponse.
CASE
ressemble plus à une instruction switch. Il a deux syntaxes que vous pouvez utiliser. La première vous permet d’utiliser les instructions de comparaison souhaitées:
CASE
WHEN user_role = 'Manager' then 4
WHEN user_name = 'Tom' then 27
WHEN columnA <> columnB then 99
ELSE -1 --unknown
END
Le second style est pour quand vous examinez seulement une valeur, et est un peu plus succinct:
CASE user_role
WHEN 'Manager' then 4
WHEN 'Part Time' then 7
ELSE -1 --unknown
END
CASE
dans MySQL est à la fois une instruction et une expression , chaque utilisation étant légèrement différente.
En tant qu'instruction, CASE
fonctionne beaucoup comme une instruction switch et est utile dans les procédures stockées, comme le montre cet exemple tiré de la documentation (lien ci-dessus):
DELIMITER |
CREATE PROCEDURE p()
BEGIN
DECLARE v INT DEFAULT 1;
CASE v
WHEN 2 THEN SELECT v;
WHEN 3 THEN SELECT 0;
ELSE
BEGIN -- Do other stuff
END;
END CASE;
END;
|
Toutefois, en tant qu’expression, il peut être utilisé dans les clauses:
SELECT *
FROM employees
ORDER BY
CASE title
WHEN "President" THEN 1
WHEN "Manager" THEN 2
ELSE 3
END, surname
En outre, en tant qu'énoncé et en tant qu'expression, le premier argument peut être omis et chaque variable WHEN
doit remplir une condition.
SELECT *
FROM employees
ORDER BY
CASE
WHEN title = "President" THEN 1
WHEN title = "Manager" THEN 2
ELSE 3
END, surname
J'ai fourni cette réponse car l'autre réponse omet de mentionner que CASE
peut fonctionner à la fois comme une déclaration et comme une expression. La principale différence entre eux est que le formulaire de déclaration se termine par END CASE
et que le formulaire d’expression se termine par END
.
Je voulais un exemple simple d'utilisation du cas avec lequel je pourrais jouer, cela n'a même pas besoin d'une table. Cela retourne impair ou pair selon que secondes est impair ou pair
SELECT CASE MOD(SECOND(NOW()),2) WHEN 0 THEN 'odd' WHEN 1 THEN 'even' END;