MySQL max() min() 函数取值错误
今天日志出现异常,一步一步debug发现SQL语句返回值出错,进一步发现是max()函数返回出错。点击跳转解决办法,赶时间的朋友可以去获得答案。当然我还是希望大伙看看原由。
select max(HTMBXH) from biz_mn_contract_temp;
返回值按理应该是10 ,结果返回了9。
网上查找后发现 是因为该字段的数据类型为 字符型 的时候 mysql 将从左到右依次比较字符 ASCII 码值大小 ,存在不相等即返回ASCII 码大的数据(min返回ASCII码小的数据)。
例如 HTMBXH:varchar(10)
例如
正常的话 max应该返回 8999999999 但是返回的却是9 。
因为MySQL 从第一个字符开始比较 8的ASCII 码为56 ,9的ASCII 为57 所以 返回9
按照这个理论 91 和9000000001 比较 第一个字符9的ASCII 相等 第二个 字符 1(49)>0(48) ,存在ASCII 不相等的情况 即返回ASCII 大的数据 91

解决办法:(max min都适用)
1. 直接修改列属性 改成 数值型 或者 日期型 即可
2. 直接强制转换类型 例如
select max(HTMBXH+0) from biz_mn_contract_temp;
这样可以获取正确的数值。
分类:
SQL
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)