SQL 语句中常需要通过逻辑判断来控制流程的操作,MySQL 标准提供了 CASE,IF,IFNULL,NULLIF 控制流函数。
MySQL 5.7 官方文 档 -> 12.4 Control Flow Functions
CASE
字段值比较:
CASE value WHEN [compare_value]CASE value WHEN [compare_value] THEN result [WHEN [compare_value] THEN result ...] [ELSE result] END当
value = compare_value为true时,返回result。如下示例:mysql> SELECT CASE 1 WHEN 1 THEN 'one' WHEN 2 THEN 'two' ELSE 'more' END; -> 'one'条件判断:
CASE WHEN [condition]CASE WHEN [condition] THEN result [WHEN [condition] THEN result ...] [ELSE result] END当条件
condition为true时,返回result;false时返回ELSE后面的值,如果没有ELSE部分,则返回NULL。mysql> SELECT CASE WHEN 1>0 THEN 'true' ELSE 'false' END; -> 'true' mysql> SELECT CASE BINARY 'B' WHEN 'a' THEN 1 WHEN 'b' THEN 2 END; -> NULL mysql> SELECT CASE BINARY 'a' WHEN 'a' THEN 1 WHEN 'b' THEN 2 END; -> 1示例:
CASE 在开发中用的很多,例如返回状态,后端存储的大多是状态编码,但返回到前端的需要的是具体的状态名
mysql> SELECT a.actor_id, a.first_name, a.last_name, a.state, ( CASE state WHEN 1 THEN '正常' WHEN 2 THEN '暂停' WHEN 3 THEN '注销' ELSE '禁用' END ) AS state_name FROM actor a WHERE a.actor_id < 6; +----------+------------+--------------+-------+------------+ | actor_id | first_name | last_name | state | state_name | +----------+------------+--------------+-------+------------+ | 1 | PENELOPE | GUINESS | 1 | 正常 | | 2 | NICK | WAHLBERG | 2 | 暂停 | | 3 | ED | CHASE | 3 | 注销 | | 4 | JENNIFER | DAVIS | 4 | 禁用 | | 5 | JOHNNY | LOLLOBRIGIDA | 5 | 禁用 | +----------+------------+--------------+-------+------------+
IF
IF 语法:如果
expr1为true( expr1 <> 0 and expr1 <> NULL),返回expr2;否则,返回expr3。IF(expr1, expr2, expr3)IF()的默认返回值类型(将其存储到临时表中时可能很重要)计算如下:如果
expr2或expr3产生一个字符串,则结果是字符串类型。如果
expr2或expr3都是字符串,如果任一字符串区分大小于,则结果区分大小写。如果
expr2或expr3产生浮点数,则结果是浮点数。如果
expr2或expr3产生整数,则结果为整数。示例
mysql> SELECT IF(1>2,2,3); -> 3 mysql> SELECT IF(1<2,'yes','no'); -> 'yes' mysql> SELECT IF(STRCMP('test','test1'),'no','yes'); -> 'no'
IFNULL
语法:如果
expr1非NULL,返回expr1;否则返回expr2IFNULL(expr1,expr2)示例:
mysql> SELECT IFNULL(1,0); -> 1 mysql> SELECT IFNULL(NULL,10); -> 10 mysql> SELECT IFNULL(1/0,10); -> 10 mysql> SELECT IFNULL(1/0,'yes'); -> 'yes'
NULL IF
语法:如果
expr1 = expr2为true,返回NULL;否则,返回expr1.NULLIF(expr1,expr2)示例:
mysql> SELECT NULLIF(1,1); -> NULL mysql> SELECT NULLIF(1,2); -> 1
更多内容请访问:IT源点
注意:本文归作者所有,未经作者允许,不得转载