Mysql的max()函数9大于10标题

打印 上一主题 下一主题

主题 887|帖子 887|积分 2661

前言

在公司老项目使用过程中都遇到过这个标题,所以这里记录下来
标题形貌

使用体系中发现体系的字典新增之后排序不固定,于是查找标题,打开数据库发现sort大部门都是"10"
mybatis中查询语句如下:
  1.  `select IFNULL(MAX(DIC_SORT),0) FROM DIC_INFO WHERE 'ProjectId' =#{ProjectId}`
复制代码
发现该语句查出来的数值为 “9”
原因分析

原因是由于,字符串截取函数截取出来的数字是 varchar 范例的。而 max 函数对于字符串的比较,是先比较首字符的 ASCii 码 的大小,然后依次往后举行比较的,所以字符串 9 比 字符串 10 大。
解决办法

所以如果想返回自然顺序的最大值,必要把范例转换为 int 后再比较。
替换函数:cast(xxx as UNSIGNED INTEGER)
Sql如下:
  1.  `select IFNULL(cast(MAX(DIC_SORT)),0) FROM DIC_INFO WHERE 'ProjectId' =#{ProjectId}`
复制代码
这里的 UNSIGNED INTEGER 可以为:
  1.  `浮点数 : DECIMAL` <br> `整数 : SIGNED INTEGER 等同于 INTEGER`<br> `无符号整数 : UNSIGNED INTEGER`<br> `二进制,同带 binary 前缀的效果 : BINARY    <br> 字符型,可带参数 : CHAR()     <br> 日期 : DATE     <br> 时间: TIME     <br> 日期时间型 : DATETIME`
复制代码
 
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

羊蹓狼

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表