概述
需求一
假设有两个销量字段,销量1和销量2,使用mysql语句查询,实现下面的效果。
销量1 | 销量2 | 销量1+销量2 | 说明(想达到的效果) |
10 | 20 | 30 | 正常的数值 |
10 | 10 | 10+空还是10 | |
20 | 20 | 空+20还是20 | |
0 | 0 | 0 | 0+0等于0 |
空+空还是空 |
思路
前提,数据库里的字段值,一定不能有null,有空值就是用空字符串展示,所以 销量1 字段是这样存储的
`销量1` varchar(50) NOT NULL DEFAULT '',
如果直接使用 select 销量1,销量2,销量1+销量2 的话
前三个还是比较正常的。问题出在了第四行,空+空,我们可能以为结果会是空。
但是在mysql5.6.16中,select ""+""; 的结果是0!
这样就不能直接写了,需要使用concat来判断。
解决
所以sql变成了如下
selct 销量1,销量2,if(concat(销量1,销量2)="","",销量1+销量2)as 销量合计 from a
需求二
下面是列总计的问题
销量1 | 销量2 | 说明(想要的结果 ) | |
销量1和销量2都是空的 | |||
列总计(也分别是空的) |
思路
计算列总计时,也会出现问题。求某一列的时候,如果这一列为空,这一列求sum的结果也得是空。但是在mysql5.6.16中,select sum("");的结果是0. 在 。
我们知道,sum(null)的结果也是null。所以可以根据这个来做处理 。
select sum(if(concat(销量1)='',null,销量1))。
注意 这个时候返回的结果是null,这个需要和前端做好协商,null也展示为空白。
当然,上面的例子多个字段也是可以处理的。
select sum(if(concat(销量1,销量2)='',null,销量1+销量2))
字段格式化的问题
下面还有字段的格式化问题。需求就是留两位小数并且用千分符格式化显示。
这个只需是在上面的基础上,套上format和round两个函数就可以了
select FORMAT(round(sum(if(concat(销量1)='',null,销量1)),0),0) from a;
最后
以上就是健康中心为你收集整理的mysql查询 null,空字符串,0的显示处理需求一思路解决需求二思路字段格式化的问题的全部内容,希望文章能够帮你解决mysql查询 null,空字符串,0的显示处理需求一思路解决需求二思路字段格式化的问题所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复