当前SQL:SELECT code FROM myTable ORDER BY code ASC
code
---
11
113
12
13A
这是我对MySQL表的当前顺序。
我希望订单是A-Z,然而,数字,如下:
code
---
11
12
13A
113
我首先无法实现此效果的原因是因为代码列是varchar而不是int。但是,如示例所示,某些代码前面有一个字母,因此我无法将其更改为整数。
如何在不更改数据类型的情况下解决此问题?
答案 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