我有一个代码列表:
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)按数值和字母对列表进行排序?
我不知道有可能做这样的事情,但看起来是这样的:
SELECT code
FROM YourTable
ORDER BY Convert(code, unsigned), code
如果您的代码始终是一个数字后跟只有 1 个字母,则以下应该有效...
SELECT code FROM table ORDER BY LENGTH(code), code
mysql 不直接支持这样的“自然”排序,但是您可以使用更复杂的 order by 子句来伪造它。但是,由于 mysql 没有捕获正则表达式,可以让您找到这些字符串中的数字/字母拆分在哪里,因此编写一个可以适当拆分内容的正则表达式会非常难看,这样您就可以做到
SELECT ugly_split_function1(yourfield) AS alpha, ugly_splitfunction2(yourfield) AS numeric
....
ORDER BY numeric, alpha
最好的解决方案是将该字段拆分为两个单独的字段,以便您可以直接对各个字段进行排序。