Mysql排序字母数字值而不考虑字母表

时间:2013-10-03 03:49:33

标签: mysql

在数据库中,它存储的值是

M2345
45
M345
E21
A3 

有没有办法正确排序?像

A3
E21
45
M345
M2345

1 个答案:

答案 0 :(得分:2)

假设在数字开始之前最多只能有一个字母,你可以在排序定义中使用这样的条件:

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

不幸的是,MySQL没有可以处理正则表达式的替换函数,否则在这一点上会非常有用。

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