MySQL处理函数之流程控制函数
May 5, 2016 3:44:45 PM
luo
638
摘要 :MySQL内置函数之流程控制函数整理。MySQL中列可以将字段看作变量来使用,变量的值就是这个列对应的每一行的记录。
[TOC]
MySQL中列可以将字段看作变量来使用,变量的值就是这个列对应的每一行的记录。
在使用select,update,delete语句以及子句where、order by、having中,我们可以使用MySQL内置函数。
流程控制函数
CASE WHEN THEN 函数
语法:
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 ;
函数用法说明:
1. 在第一个方案的返回结果中, value=compare-value 。
2. 而第二个方案的返回结果是第一种情况的真实结果。如果没有匹配的结果值,则返回结果为 ELSE 后的结果,如果没有 ELSE 部分,则返回值为 NULL。
示例
mysql> SELECT CASE 1 WHEN 1 THEN "one" WHEN 2 THEN "two" ELSE "more" END;
+------------------------------------------------------------+
| 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;
+--------------------------------------------+
| CASE WHEN 1>0 THEN "true" ELSE "false" END |
+--------------------------------------------+
| true |
+--------------------------------------------+
mysql> SELECT CASE BINARY "B" WHEN "a" THEN 1 WHEN "b" THEN 2 END;
+-----------------------------------------------------+
| CASE BINARY "B" WHEN "a" THEN 1 WHEN "b" THEN 2 END |
+-----------------------------------------------------+
| NULL |
+-----------------------------------------------------+
1 row in set (0.00 sec)
mysql> SELECT CASE BINARY "B" WHEN "a" THEN 1 WHEN "B" THEN 2 END;
+-----------------------------------------------------+
| CASE BINARY "B" WHEN "a" THEN 1 WHEN "B" THEN 2 END |
+-----------------------------------------------------+
| 2 |
+-----------------------------------------------------+
BINARY 属性是指定列的字符集的二元 校对规则的简写。排序和比较基于数值字符值。
IF 函数
IF(expr1,expr2,expr3)
如果 expr1 是TRUE (expr1 <> 0 and expr1 <> NULL),则 IF()
的返回值为expr2; 否则返回值则为 expr3。
IF() 函数 的返回值为数字值或字符串值,具体情况视其所在语境而定。
示例
mysql> SELECT IF(1>2,2,3);
+-------------+
| IF(1>2,2,3) |
+-------------+
| 3 |
+-------------+
mysql> SELECT IF(1<2,'yes','no');
+--------------------+
| IF(1<2,'yes','no') |
+--------------------+
| yes |
+--------------------+
mysql> SELECT IF(STRCMP('test','test1'),'no','yes');
+---------------------------------------+
| IF(STRCMP('test','test1'),'no','yes') |
+---------------------------------------+
| no |
+---------------------------------------+
mysql> SELECT IF(STRCMP('test','test'),'no','yes');
+--------------------------------------+
| IF(STRCMP('test','test'),'no','yes') |
+--------------------------------------+
| yes |
+--------------------------------------+
STRCMP(expr1,expr2)
若所有的字符串均相同,则返回STRCMP(),若根据当前分类次序,第一个参数小于第二个,则返回 -1,其它情况返回 1 。
mysql> SELECT IF(0.1,1,0);
+-------------+
| IF(0.1,1,0) |
+-------------+
| 1 |
+-------------+
mysql> SELECT IF(0.1<>0,1,0);
+----------------+
| IF(0.1<>0,1,0) |
+----------------+
| 1 |
+----------------+
IFNULL 函数
IFNULL(expr1,expr2)
假如expr1 不为 NULL,则 IFNULL()
的返回值为 expr1; 否则其返回值为 expr2。
IFNULL() 函数的返回值是数字或是字符串,具体情况取决于其所使用的语境。
示例
mysql> SELECT IFNULL(1,0);
+-------------+
| IFNULL(1,0) |
+-------------+
| 1 |
+-------------+
mysql> SELECT IFNULL(NULL,10);
+-----------------+
| IFNULL(NULL,10) |
+-----------------+
| 10 |
+-----------------+
mysql> SELECT IFNULL(1/0,10);
+----------------+
| IFNULL(1/0,10) |
+----------------+
| 10.0000 |
+----------------+
mysql> SELECT IFNULL(1/0,'yes');
+-------------------+
| IFNULL(1/0,'yes') |
+-------------------+
| yes |
+-------------------+
NULLIF 函数
NULLIF(expr1,expr2)
如果 expr1 = expr2 为真,返回 NULL,否则返回 expr1。它等同于 CASE WHEN x = y THEN NULL ELSE x END
:
注意:如果参数不相等,在 MySQL 中,expr1 被求值两次。
示例
mysql> SELECT NULLIF(1,2);
+-------------+
| NULLIF(1,2) |
+-------------+
| 1 |
+-------------+
mysql> SELECT NULLIF(1,1);
+-------------+
| NULLIF(1,1) |
+-------------+
| NULL |
+-------------+
来源:oschina
链接:https://my.oschina.net/u/4580084/blog/4953627