Mysql中的字母数字顺序

Pau*_*raj 2 mysql alphanumeric sql-order-by

如何在mysql中包含字母数字字符的列时只进行数字排序?

column(name)是唯一字段.

我的表包含记录,

id  name
1   ab001
2   ab010
3   aa002
4   ac004
5   ba015
6   ba006
7   aa005
8   ac003
Run Code Online (Sandbox Code Playgroud)

结果必须是这样的,

id  name
1   ab001
3   aa002
8   ac003
4   ac004
7   aa005
6   ba006
2   ab010
5   ba015
Run Code Online (Sandbox Code Playgroud)

当我尝试此查询时Select * from test order by name,我只通过字母字符获取结果顺序.我怎么得到这个?

Xav*_*ard 7

我会这样做:

select id, name from Table1 order by names + 0, names;
Run Code Online (Sandbox Code Playgroud)

没有订购:

mysql> select * from alpha;
+---+-------+
| i | name  |
+---+-------+
| 1 | ab001 |
| 2 | ab010 |
| 3 | aa002 |
| 4 | cc001 |
| 5 | cb010 |
| 6 | aaa02 |
+---+-------+
6 rows in set (0.00 sec)
Run Code Online (Sandbox Code Playgroud)

用我的查询:

mysql> select i, name from alpha order by name + 0, name;
+---+-------+
| i | name  |
+---+-------+
| 3 | aa002 |
| 6 | aaa02 |
| 1 | ab001 |
| 2 | ab010 |
| 5 | cb010 |
| 4 | cc001 |
+---+-------+
6 rows in set (0.00 sec)
Run Code Online (Sandbox Code Playgroud)


Mar*_*ers 5

假设您的字符串总是以3位数结尾,您可以使用RIGHT:

SELECT id, name
FROM Table1
ORDER BY RIGHT(name, 3);
Run Code Online (Sandbox Code Playgroud)

结果:

1, 'ab001'
3, 'aa002'
8, 'ac003'
4, 'ac004'
7, 'aa005'
6, 'ba006'
2, 'ab010'
5, 'ba015'

MySQL不支持功能索引,因此这个查询会相对较慢.重新设计数据库会更好(例如,单独存储数字),这样就不需要对函数值进行排序.