当前位置:网站首页>解决mysql语句MAX()函数中出现的问题
解决mysql语句MAX()函数中出现的问题
2022-08-06 00:28:00 【YHSevenWater】
在数据库中,当我们一些数据尚不明确具体类型时,用varchar类型表示这个字段类型是不会有问题的,(这是个好习惯!)因为varchar类型数据不管是存放数值类型或者字符串类型都能搞定,在后端代码中想进行切换计算也是比较的简单,稍作处理即可。
而此篇博文旨在记录在项目mysql语句中MAX()函数出现过的问题,虽说问题虽小,但是如果不知道这个问题所在之处的话,还是挺让人头疼的,毕竟本人就之前就无比纠结过。
如下所示,在设计表结构时的current_data类型为varchar:
按照我们mysql语句中的惯用写法,MAX()及MIN()函数应该是以下写法:
SELECT
MAX(current_data) AS maxCurrentData,
MIN(current_data) AS minCurrentData
FROM tunnel_detect_data
WHERE create_time >= '2022-06-01'
AND '2022-06-02' >= create_time
查询结果如下所示:
查询结果跟下表中实际数据对比一看就发现结果是不正确的,在对比中有好几个数据是大于993.07这个数值的,为啥会造成这样的现象呢?
原因:数据为varchar类型,那么MAX函数获取的最大值会从头开始比较,也就是说MAX函数获取的最大值都是以9开头的数值,认为开头数9多的数为最大值,导致我们所查询的结果出现了偏差。
解决办法:如果表中数据类型不是varchar类型而是具体的数值类型的话,上述的sql语句的写法是没有问题的,但是如果是varchar类型的数据,所查询的字段数据要做“+0”处理才行,否则与实际结果不相符合,如下所示:
SELECT
MAX(current_data + 0) AS maxCurrentData,
MIN(current_data + 0) AS minCurrentData
FROM tunnel_detect_data
WHERE create_time >= '2022-06-01'
AND '2022-06-02' >= create_time
查询结果如下所示:
根据与下表数据的实际对比可发现,通过“+0”操作过后的查询结果为正确结果。
总结一下:根据数据类型判断mysql语句MAX()函数中国是否需要做“+0”处理,具体问题具体分析,bug解决,欢乐多多!
路过的小伙伴,如果博文有帮助到你解决问题,可以点赞+收藏+关注一波呀~本人将会持续更新相关项目学习的博文,感谢您的支持哦!!!芜湖起飞️️️
边栏推荐
猜你喜欢
随机推荐
华为分析&联运活动,助您提升游戏总体付费
2022中国大健康展,山东大健康展,济南健康展,健康产业展
Oracle学习笔记组合索引(十二)
Go-Excelize API source code reading (1) - NewFile()
Day3:面试必考选择题
1467. 两个盒子中球的颜色数相同的概率 数学+DFS
STM32——LCD液晶显示
代理缓存的问题是什么呢?
leetcode: 二叉树的层序遍历
jsp学习
Vim编辑器常用命令汇总
接口安全性测试该从哪些方面入手?
wsa无法安装如何解决
钝感力与自我和解
Day6:面试必考选择题
文档对象模型 DOM ——让JS有能力和网页进行对话
【LeetCode】209. 长度最小的子数组
分布式二级缓存组件实战(Redis+Caffeine实现)
数据库内核面试中我不会的问题(3)
隐私计算基础组件系列-混淆电路









