mysql查询字段返回null时赋值为0
今天写代码,发现一个sql怎么也允许不成功select IFNULL(fund_total,0) from fund where user_id='AD4BF1FDBEE24C7A809D04D7B8FEBB17' and status='approved'发现如果是null时,ifnull函数失效,如果不是null,执行正常,找了半天才找到帖子内容如下:SELECT IFNULL((select
今天写代码,发现一个sql怎么也允许不成功
select IFNULL(fund_total,0) from fund where user_id='AD4BF1FDBEE24C7A809D04D7B8FEBB17' and status='approved'
发现如果是null时,ifnull函数失效,如果不是null,执行正常,找了半天才找到帖子内容如下:
SELECT IFNULL((select fund_total from fund where user_id=#{arg0} and status='approved'),0)
修改sql语句(如上)后执行正确
其中的原理我还不知道,可能,ifnull(expr1,expr2)中的expr应该是没有'变量'的表达式吧,例如: 1/0(在mysql中,它会返回0),
而select fund_total from fund where user_id=#{arg0} and status='approved' 中有 '变量'---'fund_total ',需要加一个括号括起来,让mysql转化'变量'为'常量',
当然这也只是我的猜想,没有依据,下面是帖子原文,我懒得写,直接粘过来了.
首先建一张简单的表,用于sql语句的操作
建表语句如下:
CREATE TABLE `student` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键' ,
`name` varchar(8) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '' COMMENT '名字' ,
`score` int(4) NOT NULL DEFAULT 0 COMMENT '分数' ,
PRIMARY KEY (`id`)
);
手动创建数据如下:
现在开始正题:
a. IFNULL的作用是什么?下面一个简单的sql和结果说明,如果IFNULL(a,b),a接收的值为null,则返回b,否则返回a;
SELECT IFNULL(NULL,0);
b. 以下sql语句,大家可以预测下结果,按照IFNULL函数的作用,应该返回0才对,可是结果并不是这样。
SELECT IFNULL(score,0) FROM student WHERE ID = 4;
返回结果,居然是null,与预期的结果0不一致。
c. 以下语句返回正确结果0;
SELECT IFNULL((SELECT score FROM student WHERE ID = 4),0);
总结:使用b方式使用IFNULL、SUM函数等需要确保有查询记录,否则也将返回null值,当然也可使用c方式避免返回null值,避免程序中出现NPE异常。
————————————————
版权声明:本文为CSDN博主「_再见阿郎_」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/FU250/article/details/79989410
更多推荐
所有评论(0)