开发中,遇到一个问题。查询的记录需要按照一个字段进行排序。
该字段部分记录如下:H6-ML1,H6-ML2,H6-L1,H6-L2,H6-L3...H6-L10,H6-L11...
顺序应该就按照这个顺序排列,但是H6-L1后边本应该是H6-L2,但是排列的是H6-L10。
1和10排列在一起,额,其实也在意料之中,数据库嘛,又不是没出现过这样的排序。
使用了 CONVERT(column_name using gbk) 不行,CONVERT(column_name using signed) 也不行。
如果是中文汉字一和十,兴许 gbk 的方法可以。
最后使用了 ORDER BY LEFT(column_name, 4), MID(column_name, 5, 10) + 0 来进行排序,完成了我的需求。
左侧LEFT函数,排序的是字母,默认升序,右侧的MID(ColumnName, Start [, Length]) 函数排序的是数字,Start是从1开始的,
我这里是对比第5位的大小进行排序,后边+0是过滤掉H6-ML1,此值的排序就是M排序+0排序。
目前是完成了需求,后期如果该列又有复杂的值,或许还得完善了。
参考链接:https://www.guohuawei.com/archives/mysql-order-string-and-number-in-one-field.html
网友评论