按数字 - 字母顺序输出列表 - MYSQL

时间:2012-11-14 18:40:38

标签: php mysql sql

我有一个代码列表:

1A
1B
1C
2A
2B
2C
.....
10A
10B..
11A
11B..
...

但是当我排序时,我得到以下顺序(我已从列表中删除了一些值以使其更短)

10A
10A
10B
10B
11A
11A
1A
1A
1B
1B
1C
2B
2B
2B
2B
2C

如何按正确的顺序(asc)按数值和字母顺序排列列表?

3 个答案:

答案 0 :(得分:2)

我不知道可以做这样的事情,但它看起来像是:

SELECT code
FROM YourTable
ORDER BY Convert(code, unsigned), code

答案 1 :(得分:0)

mysql并不像这样直接支持“自然”排序,但你可以用更复杂的order by子句来伪造它。但是,由于mysql没有捕获正则表达式可以让你找到这些字符串中的数字/ alpha分割的位置,所以写一个可以适当地分割的东西是非常难看的,这样你就可以做到

SELECT ugly_split_function1(yourfield) AS alpha, ugly_splitfunction2(yourfield) AS numeric
....
ORDER BY numeric, alpha

最好的解决方案是将该字段拆分为两个单独的字段,这样您就可以直接对各个字段进行排序。

答案 2 :(得分:0)

如果您的代码始终是一个数字后跟一个字母,则以下内容应该有效......

 SELECT code FROM table ORDER BY LENGTH(code), code