我的表中有这个列,其中包含货架名称
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-8
和O2-4-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
最终将中间部分转换为数字以进行排序。