📕在数据库中,当我们一些数据尚不明确具体类型时,用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解决,欢乐多多!
🍆路过的小伙伴,如果博文有帮助到你解决问题,可以点赞+收藏+关注一波呀~👊👊👊本人将会持续更新相关项目学习的博文,感谢您的支持哦!!!芜湖起飞✈️✈️✈️