2013-10-03 68 views
0

在數據庫中,存儲值是Mysql的排序不考慮字母

M2345 
45 
M345 
E21 
A3 

有沒有辦法正確地排序呢?像

A3 
E21 
45 
M345 
M2345 
+0

我從來沒有見過這個。它通過ascii代碼正確排序。在不知道它是否存在的情況下,在運行時使用替換來執行此操作會非常混亂。您可以有第二列進行排序,以擴大數值。你會遇到問題,這意味着耗時的文字編程,因爲像4 ='四',但40 ='四十'(而不是四個零)。 – ps2goat

回答

2

假設有可能是最多的數字之前一個字母開頭,你可以在你的排序定義中使用這樣的條件:

ORDER BY CAST(IF(col REGEXP '^[a-z]', SUBSTRING(col, 2), col) AS SIGNED) 

不幸的是,MySQL不具有替代功能可以處理正則表達式,否則在這一點上會非常有幫助。

您可能還想考慮將數值本身存儲在單獨的計算字段中,以便進行更有效的排序。