实际开发问题解决记录: 需求是mysql执行查询 返回数据给前端 既要返回值不为NULL的列也要返回值为NULL的列(值为NULL的列列名返回给前端)

一、查询值不为NULL 的列

我们先来看数据库所有数据

  执行的sql语句:  select id,FCJ,comeCoalForecast from FCJ 

查询结果如下:

看完执行查询所有数据的例子接下来我们查询   comeCoalForecast 这个列不为NULL的数据; sql语句的编写为 select id,FCJ,comeCoalForecast from FCJ where comeCoalForecast is not NULL ; SQL语句执行结果如下:

对比上面查询所有语句,  comeCoalForecast  这一列不为NULL , 确实只有 id为7126这一条数据; 很显然上面的sql语句一点都没毛病, 完全正确!

需要强调的是 --> 注意msql数据库中, sql语句判断不为NULL 正确语法是 字段名 is not NULL , 而不是 字段名!=NULL; 就上面而言很多入门的小白很想当然的就会写成 comeCoalForecast !=NULL;

 既然写到这了, 那么我们顺便看下 select id,FCJ,comeCoalForecast from FCJ where comeCoalForecast !=NULL 执行结果

很明显查询出来的数据并不是我们想要的正确数据,  mysql 数据库判断字段不为NULL 正确语法为:   字段名 is not NULL, 而不是 字段名!=NULL 记住就好!

二、查询值为NULL 的列

知道了上面这点. 直接上sql语句  select id,FCJ,comeCoalForecast from FCJ where comeCoalForecast is NULL; 直接结果如下:

对比上面查询所有, 很容易看出来是我们想要的正确数据!  

三、既要返回值不为NULL的列也要返回值为NULL的列

很自然大家第一反应想到的是这还不简单, 直接 select * from 表名 不就好了; 且慢; 大家接着往下看, 这是小编在实际开发中遇到的真实的例子

小编也和大家一样, 也是查询出前端需要显示的列然后返回数据给前端, 关键代码如下:

执行的sql 语句:

select id,DATE_FORMAT(date,'%Y-%m-%d %H:%i:%s') as date,cl_aws_trainno,FCJ, cl_aws_coalname,cl_aws_minename,
        cl_aws_jweight,MJ,density,comeCoalForecast ,DATE_FORMAT(haveTime,'%Y-%m-%d %H:%i:%s') as haveTime,classGroup ,
				heavyCarAmount ,
        allProcessHeatValue   from FCJ 

(补充说明一些内容: 上面sql语句中 DATE_FORMAT(date,'%Y-%m-%d %H:%i:%s') as date 是格式化数据库中date这个日期 datetime时间类型的列 为标准的 时间格式;  格式: 2021-03-01 00:00:00(举例示例)

Java代码中对应数据库 date 日期类型为 datetime 实体类中的 date属性的值定位的为String 字符串类型)

上面sql语句查询结果如下:

上面小编使用的是Navicat 连接数据库, 在上面显示的结果中 comeCoalForecast 不管值为NULL还是值为NULL的数据都显示出来了对应的列; 小编以为这样就符合要求了, 但是当我把查询返回的结果返回给前端通过Postman 调用却有了不一样的发现:

此处我返回数据给前端, 那么数据库列的值为NULL, 但是最起码也得要把列名给前端传过去, 很明显上面通过postman得出的结果不行, 也就是说通过 select *from table 这种方式查询, mysql数据库中值为NULL的列的列名不会显示出来,  最终小编通过查询资料文档, 找到一个     IFNULL(expr1,expr2) 这个内置函数, 参数expr1为判断数据库中某个列的值是否为NULL , expr2参数的作用是给这个值为NULL的列赋值, 如果expr1这个数据库列的值为NULL, 那么我可以把查询出来expr1这一列的值赋值为aa(任意值都可以, 自定义的), 如果expr1这一列的值不为NULL, 则按expr1原值显示, 原来是什么值就显示什么值;  请看具体操作实例:

执行sql语句:  select id,FCJ,IFNULL(comeCoalForecast,"aa") from FCJ ; 结果如下:

大家可以看到查询出来的comeCoalForecast这一列的列名上面显示成了IFNULL(comeCoalForecast,"aa") 很明显看起来别捏, 接下来直接用mysql语句里面的as 自定义列名就好啦, 具体看代码:

 select id,FCJ,IFNULL(comeCoalForecast,"aa")  as comeCoalForecast from FCJ; 执行结果如下:

效果很好,  达到了我们想要的效果, as 列名别称, 后面的名字也可以任意定制, 请看具体操作:

select id,FCJ,IFNULL(comeCoalForecast,"aa")  as AAA  from FCJ; 执行结果如下:

立马见效, 小编玩得不亦乐乎, 哈哈, 废话不多说, 小编写得这么详细, 想必大家很容易看明白看懂, 上面讲了这么多就为了把数据库 值为NULL的列和值不为NULL的列都给显示出来. 如果值不为NULL自然按原值查询显示, 但是如果某些列的值为NULL, 最起码列名你得给我显示出来吧, 上面抛砖引玉那么多, 小编直接上代码:  因为我和前端协商沟通好了, 如果数据库某个列值为NULL, 我就直接赋值为"" 空字符串, 他那边接收到某个列的值为"", 自然也就知道数据库中该列是没有值的为NULL值

select id,DATE_FORMAT(date,'%Y-%m-%d %H:%i:%s') as date,cl_aws_trainno,FCJ, 
        cl_aws_coalname,cl_aws_minename,
        cl_aws_jweight,MJ,density, ifnull(comeCoalForecast,"") as 
        comeCoalForecast,ifnull(DATE_FORMAT(haveTime,'%Y-%m-%d %H:%i:%s') ,"") as haveTime,
		ifnull(classGroup,"") as classGroup , 
		ifnull(heavyCarAmount,"") as heavyCarAmount ,
        IFNULL(allProcessHeatValue,"") as allProcessHeatValue  from FCJ
        //数据库某个列的值可能为NULL,加上函数判断即可

请看结果 :

因为和前端工程师已经协商好了, 数据库列的值不为NULL自然按原值显示, 如果数据库某些列的值为NULL 虽然是查询出来没有值, 但是返回前端最起码你得给我把对应的列名显示出来吧, 上面这种解决方式实现了这个需求, 这是小编在实际开发工作中遇到的真实存在的问题, 特此记录, 原创不易, 如果觉得小编写得还不错的话, 欢迎一键三连, 点关注, 感谢感谢! 

我们下期不见不散 

 

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值