MYSQL的自然排序没有按照预期进行


MYSQL natural sorting not behaving as expected

在查询中没有按照预期进行自然排序。我不明白为什么。看过这个网站http://www.copterlabs.com/blog/natural-sorting-in-mysql/后,这个方法在大多数情况下都是有效的。然而,'code'的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';

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

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

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