0

我有一个代码列表:

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)按数值和字母对列表进行排序?

4

3 回答 3

2

我不知道有可能做这样的事情,但看起来是这样的:

SELECT code
FROM YourTable
ORDER BY Convert(code, unsigned), code
于 2012-11-14T19:18:14.710 回答
0

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

 SELECT code FROM table ORDER BY LENGTH(code), code
于 2012-11-14T18:58:03.600 回答
0

mysql 不直接支持这样的“自然”排序,但是您可以使用更复杂的 order by 子句来伪造它。但是,由于 mysql 没有捕获正则表达式,可以让您找到这些字符串中的数字/字母拆分在哪里,因此编写一个可以适当拆分内容的正则表达式会非常难看,这样您就可以做到

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

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

于 2012-11-14T18:45:14.250 回答