2010-12-13 84 views
2

如何排序數據而不是按字典順序排列這些數據?mysql與數字排序varchar

100_10A 
100_10B 
100_10C 
100_11A 
100_11B 
100_11C 
100_12A 
100_12B 
100_12C 
100_13A 
100_13B 
100_13C 
100_14A 
100_14B 
100_14C 
100_15A 
100_15B 
100_15C 
100_16A 
100_16B 
100_16C 
100_1A 
100_1B 
100_1C 
100_2A 
100_2B 
100_2C 
100_3A 
100_3B 
100_3C 
100_4A 
100_4B 
100_4C 
100_5A 
100_5B 
100_5C 
100_6A 
100_6B 
100_6C 
100_7A 
100_7B 
100_7C 
100_8A 
100_8B 
100_8C 
100_9A 
100_9B 
100_9C 

select generalcolum from mytable order by blockid, plotid ASC 

我需要出這種順序是

100_1A 
100_1B 
100_1C... 
... 
... 
100_10A 
100_10B 
100_10C 

我需要以某種方式做的是增加了一個零的那種情況,這樣,我可以讓他們在訂貨之前我想要。

有兩個colums,一個存儲100(下劃線之前的數字)和一個存儲下劃線之後的值1A。

我須藤廢話選擇

select thiscolum this table 
order by blockid, plotid(+1 zero to prefix if len(plotid) < 2) 

例如,如果情節值是1A,做最好的排序,我需要它被看作是01A,這樣說到10A之前。

+1

在寫一個問題時,請考慮一下如何在首頁顯示前兩行時出現問題。把最重要的事情放在第一位。在你的問題中包括一些測試數據是好的,但把它放在最後。 – 2010-12-13 21:04:45

+2

什麼是前綴「100_」?它會改變嗎? – Flinsch 2010-12-13 21:05:03

+0

前綴100可以改變記錄,同樣它可能包含99的值。在那裏我也想用前導零作爲它的前綴,如果它的長度不是3的話。 – 2010-12-13 21:12:16

回答

7
order by length(blockid), blockid, length(plotid), plotid 
+0

我試過這個,得到一個錯誤: FUNCTION databasename.len不存在。 – 2010-12-13 21:15:52

+0

好的,嘗試使用'length'而不是'len'。我也在這個方向糾正了我的帖子。 – Flinsch 2010-12-13 21:26:51

+0

謝謝你的回覆。非常簡單,但從我所能看到的是正在做我所需要的。你可以用一個傻瓜來打擾我爲什麼這個工程。 – 2010-12-13 21:31:35