2010-03-06 17 views
4

我想從mysql表中獲取數據,按其中一個varchar列進行排序。因此,讓我們說我有這樣的查詢:如何使用ORDER BY正確處理數字?

SELECT name, model FROM vehicle ORDER BY model 

的問題是,對於這樣的「模式」值:「S43的」,爲「S 111」的順序將是:

S 111 
S 43 

因爲我想ORDER BY使用字母順序規則,對嗎?那麼如何修改這個查詢來獲得「數字」的順序呢? 'S 43'會在'111'之前嗎?無需更改或向此表添加任何數據。

回答

5

事情是這樣的:

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

請注意,這不是一個好的做法是通過函數的結果進行排序,因爲它產生的動態沒有索引的結果可以是很慢的,尤其是在大型數據集。

+0

+1的性能警告。 – 2010-03-06 12:18:11

1

如果固定長度的非數字部分的,你可以

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

,或者如果非數字部分的長度發生變化,你可以

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