MySQL按字母和数字排序

时间:2016-12-15 15:28:11

标签: mysql sql

我的表中有这个列,其中包含货架名称

M2-8-3
N1-12-1 
N1-3-8 
N2-6-1 
O1-11-3
O2-1-5 
O2-10-1 
O2-10-2 
O2-10-6 
O2-16-7 
O2-17-6 
O2-17-7 
O2-4-2

当我按升序排序时,它会在上面显示结果,但我怎样才能编写查询以便在下面显示结果

M2-8-3
N1-3-8 
N1-12-1 
N2-6-1 
O1-11-3
O2-1-5 
O2-4-2
O2-10-1 
O2-10-2 
O2-10-6 
O2-16-7 
O2-17-6 
O2-17-7 

区别在于N1-3-8O2-4-2

的位置

2 个答案:

答案 0 :(得分:1)

试试这个:

SELECT col
FROM yourTable
ORDER BY SUBSTRING_INDEX(col, '-', 1),
         SUBSTRING(SUBSTRING_INDEX(col, '-', -2),
                   1,
                   INSTR(SUBSTRING_INDEX(col, '-', -2), '-') - 1),
         SUBSTRING_INDEX(col, '-', -1)

这是强力方法,其中ORDER BY子句中的三个术语中的每一个对应于连字符串的一部分。

答案 1 :(得分:0)

这可能是一个稍微简单的方法:

order by substring_index(col, '-', 1),
         substring_index(col, '-', -2) + 0,
         col

最终将中间部分转换为数字以进行排序。