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,我只通过字母字符获取结果顺序.我怎么得到这个?
我会这样做:
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)
假设您的字符串总是以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不支持功能索引,因此这个查询会相对较慢.重新设计数据库会更好(例如,单独存储数字),这样就不需要对函数值进行排序.