mysql 中文含数字排序_英语| 124期 Sort 坑爹的字符串排序

f232eded33a9ced8461e71c9d143050c.png

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

单词语法

Grammar

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 分开

d5578aabdfaced1a7e10b1421378a9b4.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值