ITPub博客

首页 > 数据库 > > 12.4 控制流函数

12.4 控制流函数

作者:飘絮絮絮丶 时间:2020-05-12 10:28:58 0 删除 编辑

参考官方文档:

dev.mysql.com/doc/refma



  • CASE value WHEN [compare_value] THEN result [WHEN [compare_value] THEN result ...] [ELSE result] END


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


  • IF(expr1,expr2,expr3)



如果expr1为TRUE(expr1 <> 0且expr1 <> NULL),则IF()返回expr2。 否则,它返回expr3。


注意:


还有一个IF语句,它不同于这里描述的IF()函数。


如果expr2或expr3中只有一个显式为NULL,那么IF()函数的结果类型就是非NULL表达式的类型。


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,expr2)



如果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)(一个字符串类型)



  • NULLIF(expr1,expr2)



如果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/ ,如需转载,请注明出处,否则将追究法律责任。

上一篇: MYSQL 客户端程序
请登录后发表评论 登录
全部评论

注册时间:2019-09-09

  • 博文量
    2646
  • 访问量
    42213