mysql中MAX取varchar类型最大值问题

博客讨论了MySQL中VARCHAR类型字段在排序时出现的问题,由于按照字节比较而非数值,导致错误的最大值。文章提到了如何通过CONVERT函数将varchar转换为UNSIGNED类型来正确获取最大值。内容还涉及了数据类型转换的重要性和最佳实践。

DB中的数据

req表的dtime(毫秒)

718562
688359
617508
521825
432790
4305059
256805
2528112
237190
2334679
22647
1798347
1748652
1046697

首先表中dtime的类型是varchar(至于为何是varchar可能是领导说话“一言九鼎”吧)

表中的数据是按照dtime的倒序排序的,从中可以看到mysql再对varchar类型进行排序的时候,是按照位进行比较的。比如7>6,那么7>61.

SELECT MAX(dtime) FROM req

打印结果

所以取最大值的时候,718562就是最大的了,实际最大值是4305059

 解决上述问题,就是要将字符转换成数值型,然后再取最大值,使用mysql的covert函数,CONVERT(字段,类型)

SELECT MAX(CONVERT(dtime,UNSIGNED)) FROM req

打印结果

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

漁陽

彼此共勉,砥砺前行

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值