• 解决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解决,欢乐多多!
        🍆路过的小伙伴,如果博文有帮助到你解决问题,可以点赞+收藏+关注一波呀~👊👊👊本人将会持续更新相关项目学习的博文,感谢您的支持哦!!!芜湖起飞✈️✈️✈️
    在这里插入图片描述

  • 相关阅读:
    【推荐系统学习】推荐系统架构
    海外服务器没备案该做什么防御呢
    STM32快速入门(定时器之输入捕获)
    蓝桥杯——递增序列和货物摆放
    HTML5期末考核大作业:基于Html+Css+javascript的网页制作(化妆品公司网站制作)
    Kotlin File BufferedOutputStream write ByteArray
    海域可视化监管:浅析海域动态远程视频智能监管平台的构建方案
    手把手教你制作手机底部导航栏,领导看完都说好
    wy的leetcode刷题记录_Day48
    Amazon Bedrock | 大语言模型CLAUDE 2体验
  • 原文地址:https://blog.csdn.net/qq_37530429/article/details/126160924