一、前言
我们在查询数据的时候,如果没有对应的数据则返回为null
,特别是在left join
和 right join
中经常出现null
值,因为我们这里总结一下怎么给null
值赋一个默认值。
需求:
当city_level
为null
的时候,赋默认值为1
,当不为null
的时候,则显示正常的数据。
二、赋值用到的mysql函数
下面这些函数都是博主根据需求百度的,在搜索资料的同时也学到了很多,以前没仔细看mysql
的文档,竟然不知道有这么多好用的函数。。
1、IFNULL() 函数
FNULL(expr1,expr2) as city_level //city_level 是字段名
按照函数的定义,当city_level
的值为null
的时候,就赋一个默认值expr2
,当city_level
的值不为null
的时候,则取expr1
。
实例:
IFNULL(null, 1) AS city_level
博主在搜索的时候发现大家给出的例子都是这种写法,不过这种写法是不管city_level
的值,强行都赋值为1
,即expr2
的值,明显是不符合咱们的需求。
修改为:
IFNULL(f.city_level, 1) AS city_level
这样就可以了,当city_level
的值不为null
的时候,就显示f.city_level
的值即可
2、coalesce()函数
实例:
coalesce(f.city_level,1) as city_level
用法和IFNULL
类似,写法也类似。当city_level
为null
的时候,取默认值为1
。当city_level
不为null
的时候,显示f.city_level
的值。这个函数可以跟多个参数,类似于从左到右依次判断:
coalesce(a,b,c,d);
语意:
如果a ==null
则取b
的值。当b
的值为null
的时候,则取c
的值。当c
的值为null
的时候,则取d
的值。当d
的值也为null
的时候,则返回null
。
coalesce(NULL,NULL,'111',NULL); // '111'
coalesce(NULL,NULL,NULL,NULL) //NULL
3、NULLIF()函数
NULLIF(expr1,expr2)
这个函数很有意思,类似于:CASE WHEN expr1 = expr2 THEN NULL ELSE expr1 END
。
4、isNULL()
还有isNULL()
函数,语意是对比null
值,是null
则返回1
,不是null
则返回0
。
5、NVL()
这个函数类似于咱们上面的IFNULL()
函数,不过这个函数在mysql
里面是没有的,只在oracle
数据库中适用。
关于NVL()函数: https://www.cnblogs.com/yhoralce/p/6872121.html
6、IF()函数
博主前几天刚好也用到了IF()
函数,和这几个函数挺像的,语意是:
IF(expr1,expr2,expr3),如果expr1的值为true,则返回expr2的值,如果expr1的值为false
参考:
mysql根据条件批量插入更新(on duplicate key update)
MySQL 的IFNULL()、ISNULL()和NULLIF()函数
三、总结
以上就是关于mysql
函数的一些介绍,综上所述,推荐写法是coalesce()
,这个函数在mysql
和oracle
中是通用的,而且可以设置多个参数,更加灵活一些。
end