我想从mysql表中获取数据,并按其中一个varchar列进行排序。所以我要说我有这样的查询:
SELECT name, model FROM vehicle ORDER BY model
问题是,对于像这样的'模型'值:'S 43','S 111',顺序将是:
S 111
S 43
因为我认为ORDER BY使用字母顺序规则,对吧?那么如何修改此查询以获得“数字”顺序? 'S 43'将在'S 111'之前?无需更改或向此表添加任何数据。
答案 0 :(得分:5)
这样的事情:
SELECT name, model
FROM vehicle
ORDER BY CAST(TRIM(LEADING 'S ' FROM model) AS INTEGER)
请注意,按功能结果排序并不是一个好习惯,因为它会产生动态的非索引结果,这可能会非常慢,尤其是在大型数据集上。
答案 1 :(得分:1)
答案 2 :(得分:1)
如果非数字部分的长度恒定,则可以
ORDER BY substring(model, <length of non-numeric portion>)
或者,如果非数字部分的长度不同,您可以
ORDER BY substring(model, 1 + LOCATE(' ', model))