MySql 里的IFNULL、NULLIF和ISNULL用法区别
- ifnull(expr1,expr2) 的用法:
IFNULL(expr1,expr2)即如果expr1不为空,则返回值为expr1;expr1为NULL,则返回为expr2;expr2有点类似替补球员;
举例:
mysql> select IFNULL(1,0);
-> 1
mysql> select IFNULL(0,10);
-> 0
mysql> select IFNULL(1/0,10);
-> 10
mysql> select IFNULL(1/0,yes);
-> yes
注意:IFNULL只是针对局部字段的替换;如果整个结果查出来都是空,则不能使用IFNULL(P1,P2)
应用场景:
mybatis返回的null类型数据消失,导致前端展示出错。
如果查询出的结果是空值,应当转换成空字符串。当然在前端可以用?三目比较运算符进行判断,但要求后台实现这个功能。IFNULL()返回一个数字或字符串值,取决于它被使用的上下文环境。
- isnull(expr) 的用法:
假如expr 为null,那么isnull() 的返回值为 1,否则返回值为 0。
mysql> select isnull(1+1);
-> 0
mysql> select isnull(1/0);
-> 1
使用= 的null 值对比通常是错误的。
isnull() 函数同 is null比较操作符具有一些相同的特性。详细差异需比较is null操作符。
- NULLIF(expr1,expr2) 的用法:
如果expr1 = expr2 成立,那么返回值为NULL,否则返回值为 expr1。这和CASE WHEN expr1 = expr2
THEN NULL
ELSE expr1 END相同。
mysql> SELECT NULLIF(1,1);
-> NULL
mysql> SELECT NULLIF(1,2);
-> 1
如果参数不相等,则 NULLIF(expr1,expr2) 求得的值为 expr1 。