我知道SQL的CASE
语法如下:
CASE
WHEN search_condition THEN statement_list
[WHEN search_condition THEN statement_list] ...
[ELSE statement_list]
END CASE
然而,我不明白它是如何工作的,可能是因为我把它看作是一条if
语句。
例如,如果我在表user_role
中有一个字段,其中包含“经理”、“兼职”等名称,我如何根据角色生成具有不同数字的字段role_order
。在本例中,"if user_role = 'Manager‘then role_order = 5“。
请注意,我正在寻找一个教人如何钓鱼的答案,而不是给一个人一个鱼的答案。
发布于 2010-08-03 00:31:47
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
发布于 2015-01-03 00:14:43
MySQL中的CASE
既是statement又是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;
|
但是,作为表达式,它可以用在子句中:
SELECT *
FROM employees
ORDER BY
CASE title
WHEN "President" THEN 1
WHEN "Manager" THEN 2
ELSE 3
END, surname
此外,无论是作为语句还是表达式,第一个参数都可以省略,并且每个WHEN
都必须接受一个条件。
SELECT *
FROM employees
ORDER BY
CASE
WHEN title = "President" THEN 1
WHEN title = "Manager" THEN 2
ELSE 3
END, surname
我之所以提供这个答案,是因为另一个答案没有提到CASE
既可以用作语句,也可以用作表达式。它们之间的主要区别是语句形式以END CASE
结尾,而表达式形式仅以END
结尾。
发布于 2016-11-17 23:33:53
我想要一个使用case的简单示例,我可以使用它,这甚至不需要一张桌子。这将返回奇数或偶数,具体取决于秒是奇数还是偶数
SELECT CASE MOD(SECOND(NOW()),2) WHEN 0 THEN 'odd' WHEN 1 THEN 'even' END;
https://stackoverflow.com/questions/3389713
复制相似问题