如何使用ORDER BY正确处理数字?

时间:2010-03-06 12:03:41

标签: sql mysql

我想从mysql表中获取数据,并按其中一个varchar列进行排序。所以我要说我有这样的查询:

SELECT name, model FROM vehicle ORDER BY model

问题是,对于像这样的'模型'值:'S 43','S 111',顺序将是:

S 111
S 43

因为我认为ORDER BY使用字母顺序规则,对吧?那么如何修改此查询以获得“数字”顺序? 'S 43'将在'S 111'之前?无需更改或向此表添加任何数据。

3 个答案:

答案 0 :(得分:5)

这样的事情:

SELECT name, model 
FROM vehicle 
ORDER BY CAST(TRIM(LEADING 'S ' FROM model) AS INTEGER)

请注意,按功能结果排序并不是一个好习惯,因为它会产生动态的非索引结果,这可能会非常慢,尤其是在大型数据集上。

答案 1 :(得分:1)

您只能使用数字部分(子字符串函数)并将其转换为int(强制转换函数)。

mySQL cast functions

mySQL string functions

我自己没有测试过,但我认为它应该可行。

答案 2 :(得分:1)

如果非数字部分的长度恒定,则可以

ORDER BY substring(model, <length of non-numeric portion>)

或者,如果非数字部分的长度不同,您可以

ORDER BY substring(model, 1 + LOCATE(' ', model))