转自:http://www.baike369.com/content/?id=5692
MySQL CASE语句
CASE语句是另一个进行条件判断的语句。它可以实现比IF语句更复杂的条件判断。
第一种CASE语句格式
基本语法格式如下:
CASE case_expr
WHEN when_value THEN statement_list
[WHEN when_value THEN statement_list]...
[ELSE statement_list]
END CASE
其中,case_expr参数表示条件判断的表达式,决定了哪一个WHEN子句会被执行;when_value参数表示表达式可能的值,如果某个when_value表达式与case_expr表达式结果相同,则执行对应THEN关键字后的statement_list中的语句;statement_list参数表示不同when_value值的执行语句。
实例1:
CASE流程控制语句的第1种格式。SQL代码如下:
CASE age
WHEN 18 THEN SET @count1=@count1+1;
ELSE SET @count2=@count2+1;
END CASE;
其中,“@”的用法可以阅读“MySQL定义条件和处理程序”这篇文章。
如果age的值为18,count1的值加1;否则count2的值加1。
CASE语句都要使用END CASE结束。
实例2:
使用CASE语句的第1种格式,判断val的值等于1、等于2,或者两者都不等。SQL语句如下:
CASE val
WHEN 1 THEN SELECT 'val is 1';
WHEN 2 THEN SELECT 'val is 2';
ELSE SELECT 'val is not 1 or 2';
END CASE;
当val值为1时,输出字符串“val is 1”;当val值为2时,输出字符串“val is 2”;否则输出字符串“val is not 1 or 2”。
第二种CASE语句格式
基本语法格式如下:
CASE
WHEN expr_condition THEN statement_list
[WHEN expr_condition THEN statement_list]...
[ELSE statement_list]
END CASE
其中,expr_condition参数表示条件判断语句;statement_list参数表示不同条件的执行语句,该语句中,WHEN语句将被逐个执行,直到某个expr_condition表达式为真,则执行对应THEN关键字后面的statement_list语句;如果没有条件匹配,ELSE子句里的语句将被执行。
提示:
这里介绍的用在存储程序(存储过程或存储函数)里的CASE语句与“控制流程函数”里描述的SQL CASE表达式的CASE语句有轻微不同。这里的CASE语句不能有ELSE NULL子句,并且用END CASE替代END来终止。
实例1
CASE流程控制语句的第2种格式。SQL代码如下:
CASE
WHEN age=18 THEN SET @count1=@count1+1;
ELSE SET @count2=@count2+1;
END CASE;
如果age的值为18,count1的值加1;否则count2的值加1。
实例2
使用CASE语句的第2种格式,判断val是否为空、小于0、大于0或者等于0。SQL语句如下:
CASE
WHEN val IS NULL THEN SELECT 'val is NULL';
WHEN val<0 THEN SELECT 'val is less than 0';
WHEN val>0 THEN SELECT 'val is greater than 0';
ELSE SELECT 'val is 0';
END CASE;
当val值为空,输出字符串“val is NULL”;当val值小于0时,输出字符串“val is less than 0”;当val值大于0时,输出字符串“val is greater than 0”;否则输出字符串“val is 0”。