关于Mysql的数字字符串(varchar)排序问题

在MySQL数据库中,当字段类型为varchar且包含数字时,按默认排序会产生不符合预期的结果,例如17会排在2之前。解决方法是在ORDER BY子句中使用detectbatch+0,将字符串转换为数值进行排序,从而得到正确的1,2,3,17,18...的顺序。
摘要由CSDN通过智能技术生成

关于Mysql的数字字符串(varchar)排序问题


本人新手菜鸡,该文章仅为自己的学习问题记录,如有不足望大佬指正

在最近的项目实验中,对读取到的mysql数据库进行了一个排序问题,其中Mysql的数字字符串(varchar)排序折磨了我一段时间哈哈哈哈(主要自己太菜)

表格中字段类型是varchar,需要进行排序的是17,18,2,1,3……
下面,我从数据库里面以detectbatch 排一下序,大家来看一下排序后的结果:

 string sql = "select * from filmdetect.fault where detectTime >='" + startTime + "' and detectTime <= '" + endTime + "' order by detectbatch asc";
排序结果:                
+———–+ 
| detectbatch | 
+———–+ 
| 1 | 
| 17 |
| 18 |
| 2 |
| 3 |
……
+———–+
————————————————

很明显,我想要的结果应该是 1,2,3,17,18 这样的。但是这个17和18排在了2的前面,这是按照字符串来排的,但其实我是想把它当做数值来排。
手动转换类型:
用下面的方法就可以了,使detectbatch+0之后再排序,问题解决了。

string sql = "select * from filmdetect.fault where detectTime >='" + startTime + "' and detectTime <= '" + endTime + "' order by detectbatch+0 asc";
排序结果
+———–+ 
| detectbatch | 
+———–+ 
| 1 | 
| 2 |
| 3 |
| 17 |
| 18 |
……
+———–+
————————————————
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值