MySQL CASE如何工作?
我知道SQL的CASE
语法如下:
CASE WHEN search_condition THEN statement_list [WHEN search_condition THEN statement_list] ... [ELSE statement_list] END CASE
但是,我不明白这是如何工作的,可能是因为我正在考虑if
是一个if
语句。
如果我在表user_role
有一个字段,例如包含“Manager”,“Part Time”等名称的字段,如何根据angular色生成具有不同编号的字段role_order
。 在这个例子中,“if user_role ='Manager'then role_order = 5”。
请注意我正在寻找一个教男人如何钓鱼的答案,而不是给一个男人一条鱼的答案。
CASE
更像是一个switch语句。 它有两个可以使用的语法。 第一个让你使用你想要的任何比较语句:
CASE WHEN user_role = 'Manager' then 4 WHEN user_name = 'Tom' then 27 WHEN columnA <> columnB then 99 ELSE -1 --unknown END
第二种风格是当你只考察一个价值时,更简洁一点:
CASE user_role WHEN 'Manager' then 4 WHEN 'Part Time' then 7 ELSE -1 --unknown END
MySQL中的CASE
既是一个声明,也是一个expression式 ,每个用法都略有不同。
作为一个声明, CASE
工作方式非常类似switch语句,在存储过程中非常有用,正如本文档中所示(以上链接)所示:
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; |
然而,作为一个expression式,它可以用在从句中:
SELECT * FROM employees ORDER BY CASE title WHEN "President" THEN 1 WHEN "Manager" THEN 2 ELSE 3 END, surname
另外,既作为语句又作为expression式,第一个参数可以省略,每个WHEN
必须有条件。
SELECT * FROM employees ORDER BY CASE WHEN title = "President" THEN 1 WHEN title = "Manager" THEN 2 ELSE 3 END, surname
我提供了这个答案,因为另一个答案没有提到CASE
可以同时作为一个语句和一个expression式。 它们之间的主要区别在于语句forms以END CASE
结束,而expression式forms以END
。
我想要一个简单的例子,我可以使用的情况下,这甚至不需要一个表。 这将返回奇数甚至取决于秒是奇数还是偶数
SELECT CASE MOD(SECOND(NOW()),2) WHEN 0 THEN 'odd' WHEN 1 THEN 'even' END;