我的表中有这一列,其中包含书架名称
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的位置不同
发布于 2016-12-15 23:42:05
试试这个:
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子句中的三个术语中的每一个都对应于用连字符连接的字符串的一部分。
发布于 2016-12-15 23:46:42
这可能是一种稍微简单一点的方法:
order by substring_index(col, '-', 1),
substring_index(col, '-', -2) + 0,
col这最终将中间部分转换为用于排序的数字。
https://stackoverflow.com/questions/41167768
复制相似问题