MYSQL自然排序不符合预期

时间:2015-08-19 13:30:40

标签: php mysql sorting

自然排序在查询中的行为不符合预期。我不明白为什么。看过这个网站http://www.copterlabs.com/blog/natural-sorting-in-mysql/后,该方法大部分都有效。但是,'代码的alpha部分'意味着排序以奇怪的方式发生。

结果

M1
..
M3
P1
..
P3
M10
..
M19
P10
..
P19

预期

M1
..
M3
M10
..
M19
P1
..
P3
P10
..
P19

代码

'SELECT * FROM stock ORDER BY LENGTH(code), code';

1 个答案:

答案 0 :(得分:2)

您首先按字段的长度排序。当然,这会以错误的方式混合结果。尝试拆分字母数字值和数字

SELECT * FROM stock 
ORDER BY substr(code, 1, 1), 
         substr(code, 2, 99) * 1

*1将字符串转换为数字。您也可以使用cast(substr(code, 2, 99) as signed)