一、前言
我们在查询数据的时候,如果没有对应的数据则返回为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
本文详细介绍了使用MySQL函数处理查询结果中的NULL值方法,包括IFNULL(), coalesce(), NULLIF(), isNULL(), NVL()及IF()函数的应用场景与区别。重点推荐coalesce()函数,因其在MySQL和Oracle中通用且支持多参数设置。
1051





