• 解决mysql语句MAX()函数中出现的问题


        📕在数据库中,当我们一些数据尚不明确具体类型时,用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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

        🍭查询结果如下所示:
    在这里插入图片描述

        🍪查询结果跟下表中实际数据对比一看就发现结果是不正确的,在对比中有好几个数据是大于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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

        🍭查询结果如下所示:
    在这里插入图片描述
        🍪根据与下表数据的实际对比可发现,通过“+0”操作过后的查询结果为正确结果。
    在这里插入图片描述
        🍓总结一下:根据数据类型判断mysql语句MAX()函数中国是否需要做“+0”处理,具体问题具体分析,bug解决,欢乐多多!
        🍆路过的小伙伴,如果博文有帮助到你解决问题,可以点赞+收藏+关注一波呀~👊👊👊本人将会持续更新相关项目学习的博文,感谢您的支持哦!!!芜湖起飞✈️✈️✈️
    在这里插入图片描述

  • 相关阅读:
    Redis缓存穿透解决方案-布隆过滤器
    Python实战项目-7发送验证码/短信登录/短信注册接口
    NFT Insider #69:星巴克将公布基于Web3的忠诚度计划,林俊杰宣布持有蒂芙尼NFT
    解决计算机丢失msvcr71.dll问题,总结5种解决方法分享
    国产32位单片机 普冉PY32F002B 适用于LED灯驱,控制器等
    【论文阅读】MixMatch: A Holistic Approach to Semi-Supervised Learning
    1、密码学
    1452. 收藏清单-排序+交叠比较-力扣双百代码
    基于微信公众平台API的菜谱小程序 的设计与实现
    Golang 编写测试用例(单元测试、压力测试等)最新教程,细到极致
  • 原文地址:https://blog.csdn.net/qq_37530429/article/details/126160924