首页 > 数据库 > > 12.4 控制流函数
参考官方文档:
https://dev.mysql.com/doc/refman/5.7/en/control-flow-functions.html
CASE WHEN [condition] THEN result [WHEN [condition] THEN result ...] [ELSE result] END
第一个CASE语法返回第一个 value= compare_value比较为true的result。 第二个语法返回第一个条件为true的result。 如果没有比较或条件为真,则返回ELSE后的结果;如果没有ELSE部分,则返回NULL。
注意:
这里描述的CASE表达式的语法与第13.6.5.1节“CASE语法”中描述的SQL CASE语句的语法略有不同,用于在存储程序中使用。 CASE语句不能有ELSE NULL子句,并且它以END CASE而不是END结束。
CASE表达式结果的返回类型是所有结果值的聚合类型。
mysql> SELECT CASE 1 WHEN 1 THEN 'one'
-> WHEN 2 THEN 'two' ELSE 'more' END;
-> 'one'
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
如果expr1为TRUE(expr1 <> 0且expr1 <> NULL),则IF()返回expr2。 否则,它返回expr3。
注意:
还有一个IF语句,它不同于这里描述的IF()函数。
如果expr2或expr3中只有一个显式为NULL,那么IF()函数的结果类型就是非NULL表达式的类型。
IF()的默认返回类型(在存储到临时表时可能很重要)的计算方法如下:
如果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'
如果expr1不是NULL,则IFNULL()返回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'
IFNULL(expr1,expr2)的默认返回类型是两个表达式中更“普遍”的,按照STRING,REAL或INTEGER的顺序。 考虑基于表达式的表的情况或者MySQL必须在内部存储由临时表中的IFNULL()返回的值的情况:
mysql> CREATE TABLE tmp SELECT IFNULL(1,'test') AS test;
mysql> DESCRIBE tmp;
+-------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+--------------+------+-----+---------+-------+
| test | varbinary(4) | NO | | | |
+-------+--------------+------+-----+---------+-------+
在这个例子中,test列的类型是VARBINARY(4)(一个字符串类型)
如果expr1 = expr2为true,则返回NULL,否则返回expr1。 这与CASE WHEN expr1 = expr2 THEN NULL ELSE expr1 END相同。
返回值与第一个参数具有相同的类型。
mysql> SELECT NULLIF(1,1);
-> NULL
mysql>
SELECT NULLIF(1,2);
-> 1
注意:如果参数不相等,MySQL会评估expr1两次
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/69946831/viewspace-3126664/ ,如需转载,请注明出处,否则将追究法律责任。