MySQL CASE流程控制语句的用法(附带实例)
流程控制语句用来根据条件控制语句的执行。MySQL 中用来构造控制流程的语句有 IF 语句、CASE 语句、LOOP 语句、LEAVE 语句、ITERATE 语句、REPEAT 语句和 WHILE 语句。
每个流程中可能包含一个单独语句,也可能是使用 BEGIN ... END 构造的复合语句,构造可以被嵌套。
CASE 语句有两种格式。第 1 种格式如下:
【实例 1】使用 CASE 流程控制语句的第以种格式,判断 val 值是否等于 1、等于 2,或者两者都不等,SQL 语句如下:
CASE 语句的第二种格式如下:
这里介绍的用在存储程序里的 CASE 语句与“控制流程函数”里描述的 SQL CASE 表达式的 CASE 语句有轻微不同,这里的 CASE 语句不能有 ELSE NULL 子句,并且用 END CASE 代替 END 来终止。
【实例 2】使用 CASE 流程控制语句的第二种格式,判断 val 是否为空、小于 0、大于 0 或者等于 0,SQL 语句如下:
每个流程中可能包含一个单独语句,也可能是使用 BEGIN ... END 构造的复合语句,构造可以被嵌套。
CASE 语句有两种格式。第 1 种格式如下:
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 流程控制语句的第以种格式,判断 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 来终止。
【实例 2】使用 CASE 流程控制语句的第二种格式,判断 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”。