字母数字排序

时间:2019-06-10 23:22:46

标签: mysql sql

我想按字母数字顺序对数据库中的字段进行排序。事实证明,这比我想象的要难。这只是示例值,内容可以有所不同,但我希望足以理解它。

我要对该列表进行排序:

11
01
1
1A
01B
20a
01a
20
1b
2b
02a

赞:

1
01
1A
01a
1b
01B
02a
2b
11
20
20a

请注意,带和不带前导零的等效数字的相对顺序并不重要,可以为1 0101 1

我已经尝试过CAST(field AS UNSIGNED),但是它不起作用。想法?

1 个答案:

答案 0 :(得分:2)

如果您使用的是MySQL 8.0或更高版本,则可以使用REGEXP_SUBSTR(colname, '[a-z]+$')获取字母后缀,并使用CAST(colname AS UNSIGNED)获取数字前缀。然后您可以按这些排序。

SELECT code
FROM yourTable
ORDER BY CAST(code AS UNSIGNED), REGEXP_SUBSTR(code, '[a-z]+$')

有关如何在早期版本的MySQL中获得类似功能的信息,请参见What is the equivalent of REGEXP_SUBSTR in mysql?

另一种可能性是:

ORDER BY CAST(code AS UNSIGNED), TRIM(LEADING '0' FROM code)