英语| 124期 Sort 坑爹的字符串排序



排序功能在系统中很常见,主要是对数字类型的字段进行升降排序。但是针对那些字符串数字或者带字符的数字字符串,普通的Sort排序就会出现各种各样的问题。比如对字符串数字进行降序排序,会出现:9,8,7,6,5,4,3,2,1,10,11这种异常情况。如何处理?请往下看。





单词语法

Sort

英 [sɔːt]   美 [sɔːrt]  

n. 种类;类别;品种;某一种(或某一类)人;分类;排序

v. 整理;把…分类;妥善处理;安排妥当

复数 sorts
第三人称单数 sorts
现在分词 sorting
过去式 sorted
过去分词 sorted

经典例句

We sort out the rubbish.
我们把垃圾进行分类。




编程语法

Java


需求:数据库有一张cabinet表,其中字段code的生成规则是字母加上自增的编号(CK2_9,CK2_10之类);目前要求通过code字段进行降序排序。



思路:如果直接用Spring的Sort.by方法或者是MySQL的order by 函数。都会出现下面这种情况。如何处理?我目前有三种解决方法,欢迎补充!!!

code
CK2_9
CK2_8
CK2_7
CK2_12
CK2_11
CK2_10

第一种方法直接利用MySQL自带的函数substring_index 对code字段进行字符串分隔。获取需要的数字部分,再通过+0的操作,将数字字符串成纯数字。若数据量太大,则不推荐。

select * from cabinet order by (substring_index(code, '_', -1)+0) desc

第二种方法:万金油方法,通过添加辅助字段解决排序问题。实在没有解决方案再用。

第三种方法:规范code数字部分的长度,补齐数字部分的长度,不足用0填充。比如将CK2_9和CK2_10 格式化成 CK2_009 和 CK2_010。然后就可以使用普通的排序方法。该方法需要提前预算数据量的大小,提前设置数字位的长度。

select code from cabinet order by code desc 
String.format("%04d", 1)


以下是正常输出结果

code
CK2_12
CK2_11
CK2_10
CK2_09
CK2_08
CK2_07




往期精彩

previous


英语| 123期 Schedule时刻表


英语| 122期 Space空格


英语| 121期 Memory内存

英语| 120期 Variable变量

英语| 119期 Parameter参数

英语| 118期 Index 索引

英语| 117期 Divide 分开




©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容