疯狂编程网

  • 首页
  • 后端
    • GOLANG
    • PHP
  • 前端
  • 客户端
  • 服务器
  • AIGC
  • 开发工具
  • 代码人生
  • 关于本站
    • 联系我们
    • 免责声明
  1. 首页
  2. 服务器
  3. MYSQL
  4. 正文

MySQL max() min() 函数取值错误

2023年5月10日 212点热度 0人点赞 0条评论

今天日志出现异常,一步一步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;

这样可以获取正确的数值。

标签: mysql
最后更新:2023年5月10日

大明

靠写代码养家的开发者。

点赞
< 上一篇
下一篇 >

文章评论

razz evil exclaim smile redface biggrin eek confused idea lol mad twisted rolleyes wink cool arrow neutral cry mrgreen drooling persevering
取消回复

COPYRIGHT © 2023 疯狂编程网. ALL RIGHTS RESERVED.

京ICP备2022013580号-1