Mysql的max()函数9大于10问题
  sCOKx6jalE8c 2024年05月17日 31 0

前言

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

问题描述

使用系统中发现系统的字典新增之后排序不固定,于是查找问题,打开数据库发现sort大部分都是"10"

mybatis中查询语句如下:

 `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如下:

 `select IFNULL(cast(MAX(DIC_SORT)),0) FROM DIC_INFO WHERE 'ProjectId' =#{ProjectId}`

这里的 UNSIGNED INTEGER 可以为:

 `浮点数 : DECIMAL` 
 `整数 : SIGNED INTEGER 等同于 INTEGER`
 `无符号整数 : UNSIGNED INTEGER`
 `二进制,同带 binary 前缀的效果 : BINARY    
 字符型,可带参数 : CHAR()    
 日期 : DATE    
 时间: TIME    
 日期时间型 : DATETIME`
 
【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2024年05月17日 0

暂无评论

推荐阅读
  2Vtxr3XfwhHq   2024年05月17日   52   0   0 Java
  Tnh5bgG19sRf   2024年05月20日   105   0   0 Java
  8s1LUHPryisj   2024年05月17日   46   0   0 Java
  aRSRdgycpgWt   2024年05月17日   47   0   0 Java
sCOKx6jalE8c
作者其他文章 更多