MySql利用SUBSTRING_INDEX函数实现按指定字段的任意部分排序

背景

业务返回字段格式如下:book_1,book_10,book_11,book_2 等样式的,表格内容如下:
在这里插入图片描述
如果我们按照普通的 order by 排序的话,会返回如下:

SELECT * FROM test_sort ORDER BY name;

在这里插入图片描述
但是我们需要按照 _ 后面的数字进行升序排序,-20,-1,1,2,3,10 的顺序

解决

  1. 利用 MySql 的 SUBSTRING_INDEX(str,delim,count) 函数进行截取字符串。
    函数参数解释:
    str: 待截取字符串(可以为列名)
    delim: 字符串拆分字符
    count: 截取后取出部分,-1:表示取最后一个
  2. 然后再利用 * 1,将截取的字符串转换为数值类型。

最终sql如下:

SELECT id,name,SUBSTRING_INDEX(name,"_",-1) as test_name, SUBSTRING_INDEX(name,"_",-1) * 1 as test_name2 FROM test_sort ORDER BY SUBSTRING_INDEX(name,"_",-1) * 1;

我们可以看到最终的执行接估和函数运行结果,如下:
在这里插入图片描述
至此,完美按照name字段进行了升序排序。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值