首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >MySQL CASE是如何工作的?

MySQL CASE是如何工作的?
EN

Stack Overflow用户
提问于 2010-08-03 00:29:15
回答 3查看 100.6K关注 0票数 67

我知道SQL的CASE语法如下:

代码语言:javascript
复制
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“。

请注意,我正在寻找一个教人如何钓鱼的答案,而不是给一个人一个鱼的答案。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-08-03 00:31:47

CASE更像是一个switch语句。它有两种你可以使用的语法。第一个允许您使用所需的任何比较语句:

代码语言:javascript
复制
CASE 
    WHEN user_role = 'Manager' then 4
    WHEN user_name = 'Tom' then 27
    WHEN columnA <> columnB then 99
    ELSE -1 --unknown
END

第二种风格适用于只检查一个值的情况,它更简洁一些:

代码语言:javascript
复制
CASE user_role
    WHEN 'Manager' then 4
    WHEN 'Part Time' then 7
    ELSE -1 --unknown
END
票数 110
EN

Stack Overflow用户

发布于 2015-01-03 00:14:43

MySQL中的CASE既是statement又是expression,两者的用法略有不同。

作为一条语句,CASE的工作方式与switch语句非常相似,并且在存储过程中非常有用,如文档(上面链接)中的示例所示:

代码语言:javascript
复制
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;
  |

但是,作为表达式,它可以用在子句中:

代码语言:javascript
复制
SELECT *
  FROM employees
  ORDER BY
    CASE title
      WHEN "President" THEN 1
      WHEN "Manager" THEN 2
      ELSE 3
    END, surname

此外,无论是作为语句还是表达式,第一个参数都可以省略,并且每个WHEN都必须接受一个条件。

代码语言:javascript
复制
SELECT *
  FROM employees
  ORDER BY
    CASE 
      WHEN title = "President" THEN 1
      WHEN title = "Manager" THEN 2
      ELSE 3
    END, surname

我之所以提供这个答案,是因为另一个答案没有提到CASE既可以用作语句,也可以用作表达式。它们之间的主要区别是语句形式以END CASE结尾,而表达式形式仅以END结尾。

票数 13
EN

Stack Overflow用户

发布于 2016-11-17 23:33:53

我想要一个使用case的简单示例,我可以使用它,这甚至不需要一张桌子。这将返回奇数或偶数,具体取决于秒是奇数还是偶数

代码语言:javascript
复制
SELECT CASE MOD(SECOND(NOW()),2) WHEN 0 THEN 'odd' WHEN 1 THEN 'even' END;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3389713

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档