实际开发问题解决记录: 需求是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 虽然是查询出来没有值, 但是返回前端最起码你得给我把对应的列名显示出来吧, 上面这种解决方式实现了这个需求, 这是小编在实际开发工作中遇到的真实存在的问题, 特此记录, 原创不易, 如果觉得小编写得还不错的话, 欢迎一键三连, 点关注, 感谢感谢!
我们下期不见不散
实际开发问题解决记录: 需求是mysql执行查询 返回数据给前端 既要返回值不为NULL的列也要返回值为NULL的列(值为NULL的列列名返回给前端)相关推荐
- 记录一次MySQL两千万数据的大表优化解决过程,提供三种解决方案
问题概述 使用阿里云rds for MySQL数据库(就是MySQL5.6版本),有个用户上网记录表6个月的数据量近2000万,保留最近一年的数据量达到4000万,查询速度极慢,日常卡死.严重影响业务 ...
- 记录一次MySQL两千万数据的大表优化解决过程,提供三种解决方案 1
点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试资料 作者:王帅 来源地址:https://yq.aliyun.com/ ...
- 【转载文章】记录一次MySQL两千万数据的大表优化解决过程,提供三种解决方案...
问题概述 使用阿里云rds for MySQL数据库(就是MySQL5.6版本),有个用户上网记录表6个月的数据量近2000万,保留最近一年的数据量达到4000万,查询速度极慢,日常卡死.严重影响业务 ...
- mysql开发问题解决_开发过程中mysql常见问题的解决方法
本篇文章给大家带来的内容是关于开发过程中mysql常见问题的解决方法,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 记录开发过程中遇到mysql相关的问题以及解决方法,长期更新. 远 ...
- 移动开发学习记录点滴-动态增加列表行数据
2019独角兽企业重金招聘Python工程师标准>>> 一. 使用jQueryMobile的第一步,先创建一个html页面,并在head标签中加入以下内容: <link rel ...
- 使用charles修改服务器返回数据,charles_01_打断点修改接口请求返回数据
前言 测试过程中,为了模拟某场景测试,经常需要修改接口请求或者返回数据.可通过抓包工具打断点,实现模拟测试场景.常用的抓包工具charles和fiddler均可打断点mock数据.由于小编安装了cha ...
- C#串口通信—向串口发送数据,同步接收返回数据
最近写C#串口通信程序,系统是B/S架构.SerialPort类有一个DataReceived事件,用来接收串口返回的数据,但这种方式在C/S架构下很好用,但B/S就不好处理了.所以写了一个同步模式接 ...
- 个人前端工程师开发工具记录
原文地址:https://www.zybuluo.com/yyman001/note/58799 个人前端工程师开发工具记录 我们前端,每个人都有自己的开发工作环境,工具等,所以我写了这一篇文章,为自 ...
- 31:第三章:开发通行证服务:14:开发【获得用户基本信息,接口】;(需要根据前端对返回数据的要求,创建一个只包含非隐私信息的AppUserVO类,去包装返回给前端的数据)
说明: (1)本篇博客内容:开发[获得用户基本信息,接口]: 目录 零:本篇博客合理性说明:(或者说是:[获得用户基本信息,接口]是什么) 一:正式开发: 1.在[api]接口工程的UserContr ...
最新文章
- filecoin的思考
- Linux - 系统资源
- C#如何安全、高效地玩转任何种类的内存之Span的秉性特点(二)
- 鹅厂后台开发工程师的工作日常
- JDBC笔记01-JDBC,Connection,Statement,ResultSet,PreparedStatement,Properties
- python和java学哪个好-Python和Java学哪个好就业?
- 世界地图可以无限放大_做外贸有哪些软件可以推荐?
- ubuntu下分区工具
- matlab 去除水印,初試 Matlab 之去除水印
- 经典Bug永流传---每周一“虫”(二十一)
- python 公众号 关注者位置_微信公众号获取用户地理位置
- 你不是迷茫,你只是浮躁
- 计算机固态硬盘256g,用固态硬盘的亲们 你们256g够用么?做什么用途?要买电脑 不得不考虑这个...
- 四轴飞行器资料分享,几个G ,66个文件,如果链接失效请私聊我
- Excel的透视表:概念、用途、应用
- 【STM32F429】第17章 ThreadX GUIX之点阵字体和字符编码(重要)
- IntelliJ IDEA安装使用教程 亲测2019.2.4版本可行
- 二维码打印-非EXCEL控件和非SmartForm方式
- notepad++ 下载地址(非官网,无捆绑插件,自己记录一下)
- UAV-PPK数据处理软件使用
热门文章
- 阿里的“传奇程序员”
- T(n) = 25T(n/5)+n^2的时间复杂度(转)
- 基于奇特物联MQTT协议设备接入示例
- debian usb android,Debian下挂载usb设备
- 6.Spring security中的rememberMe
- 使用java怎么实现商品三级分类_如何实现列表三级分类---后端+前端
- 利用Zookeeper实现 - 分布式锁
- SQLzoo练习题回顾
- 4.Python复杂数据类型之字典
- 项目管理第二招:对齐目标,大事化小