我想按字母数字顺序对数据库中的字段进行排序。事实证明,这比我想象的要难。这只是示例值,内容可以有所不同,但我希望足以理解它。
我要对该列表进行排序:
11
01
1
1A
01B
20a
01a
20
1b
2b
02a
赞:
1
01
1A
01a
1b
01B
02a
2b
11
20
20a
请注意,带和不带前导零的等效数字的相对顺序并不重要,可以为1 01
或01 1
。
我已经尝试过CAST(field AS UNSIGNED)
,但是它不起作用。想法?
答案 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)