2013-10-03 69 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不具有替代功能可以处理正则表达式,否则在这一点上会非常有帮助。

您可能还想考虑将数值本身存储在单独的计算字段中,以便进行更有效的排序。