ITPub博客

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

MySQL 控制流函数

原创 MySQL 作者:神谕丶 时间:2015-10-09 12:58:16 0 删除 编辑
以下内容基于MySQL 5.6及更高,大部分函数5.5也基本适用,更低版本请参考对应版本手册,其内容整理自官方。

mysql常用函数被分为五类,分别为:
①Control Flow:基于一个表达式的结果集选择不同的值(控制流函数);

②String:字符串函数;
http://blog.itpub.net/29773961/viewspace-1813545/

③Date and time:日期和时间;
http://blog.itpub.net/29773961/viewspace-1808967/


④Numeric:数字函数;

http://blog.itpub.net/29773961/viewspace-1813556/

⑤Aggregate:基于一列的多个值返回单一值(聚合函数);
http://blog.itpub.net/29773961/viewspace-1813589/


【Control Flow
】:
IF():基于表达式的结果集选择两个不同的值
  1. mysql> SELECT IF(> -3, 'YES', 'NO');
  2. +-------------------------+
  3. | IF(> -3, 'YES', 'NO') |
  4. +-------------------------+
  5. | YES                     |
  6. +-------------------------+
  7. 1 row in set (0.00 sec)
另一个有意思的比较:
  1. mysql> SELECT IF(STRCMP('test','test1'),'no','yes') RESULT;
  2. +--------+
  3. | RESULT |
  4. +--------+
  5. | no     |
  6. +--------+
  7. 1 row in set (0.00 sec)


CASE
  1. mysql> SET @a=1;
  2. 1 row in set (0.00 sec)

  3. mysql> SELECT CASE @a WHEN 1 THEN 'one' WHEN 2 THEN 'two' ELSE 'more' END RESULT;
  4. +--------+
  5. | RESULT |
  6. +--------+
  7. | one    |
  8. +--------+
  9. 1 row in set (0.00 sec)

  10. mysql> SELECT CASE WHEN 1>THEN 'true' ELSE 'false' END RESULT;
  11. +--------+
  12. | RESULT |
  13. +--------+
  14. | true   |
  15. +--------+
  16. 1 row in set (0.00 sec)


  17. mysql> SELECT CASE '1' WHEN 'a' THEN 'true' WHEN 'b' THEN 'true' END RESULT;    -- 如果没有else处理,则返回NULL
  18. +--------+
  19. | RESULT |
  20. +--------+
  21. | NULL   |
  22. +--------+
  23. 1 row in set (0.00 sec)


IFNULL(expr1,expr2):如果expr1为null,返回expr2,否则返回expr1。
  1. mysql> SELECT IFNULL(NULL,'hi') test1,
  2.     -> IFNULL(NULL,234) test2,
  3.     -> IFNULL(2/0,456) test3,
  4.     -> IFNULL(3/3,123) test4;
  5. +-------+-------+----------+--------+
  6. | test1 | test2 | test3    | test4  |
  7. +-------+-------+----------+--------+
  8. | hi    | 234   | 456.0000 | 1.0000 |
  9. +-------+-------+----------+--------+
  10. 1 row in set (0.00 sec)
结果集为什么为456.0000,1.0000是因为mysql中默认的除法将保留4位小数,比如:
  1. mysql> select 3/3;
  2. +--------+
  3. | 3/3    |
  4. +--------+
  5. | 1.0000 |
  6. +--------+
  7. 1 row in set (0.00 sec)


NULLIF(expr1,expr2):如果expr1=expr2,返回NULL,反之返回expr1。
  1. mysql> SELECT NULLIF(-1,3) RESULT, NULLIF('test','test') RESULT;
  2. +--------+--------+
  3. | RESULT | RESULT |
  4. +--------+--------+
  5. | -1     | NULL   |
  6. +--------+--------+
  7. 1 row in set (0.00 sec)

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/29773961/viewspace-1813557/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
微信公众号:fantasy-life-

注册时间:2014-07-28

  • 博文量
    159
  • 访问量
    970371