以数字方式排序VARCHAR列

时间:2014-11-17 20:16:33

标签: mysql sql innodb

当前SQL:SELECT code FROM myTable ORDER BY code ASC

code
---
11
113
12
13A

这是我对MySQL表的当前顺序。

我希望订单是A-Z,然而,数字,如下:

code
---
11
12
13A
113

我首先无法实现此效果的原因是因为代码列是varchar而不是int。但是,如示例所示,某些代码前面有一个字母,因此我无法将其更改为整数。

如何在不更改数据类型的情况下解决此问题?

2 个答案:

答案 0 :(得分:3)

最简单的方法是使用静默转换。只需添加0:

order by code + 0

在实践中,您可能需要:

order by code + 0, code

答案 1 :(得分:2)

这应该可行,首先按数字排序,然后按字母数字排序(如果相同的数字):

select * from myTable
order by cast(replace(code,'[0-9]+','') as unsigned), code

请参阅此SQL Fiddle