我有一个代码列表:
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)按数值和字母顺序排列列表?
答案 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