背景
业务返回字段格式如下:book_1,book_10,book_11,book_2 等样式的,表格内容如下:
如果我们按照普通的 order by 排序的话,会返回如下:
SELECT * FROM test_sort ORDER BY name;
但是我们需要按照 _ 后面的数字进行升序排序,-20,-1,1,2,3,10 的顺序
解决
- 利用 MySql 的 SUBSTRING_INDEX(str,delim,count) 函数进行截取字符串。
函数参数解释:
str: 待截取字符串(可以为列名)
delim: 字符串拆分字符
count: 截取后取出部分,-1:表示取最后一个 - 然后再利用 * 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字段进行了升序排序。