MySQL 如何使用ORDER BY CASE WHEN REGEXP排序查询?
使用CASE语句和正则表达式。让我们先创建一个表 –
mysql> create table DemoTable
(
Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
Value varchar(20)
);
查询成功,受影响行数为0(0.66秒)
使用插入命令向表中插入一些记录 –
mysql> insert into DemoTable(Value) values('101');
查询成功,受影响行数为1(0.20秒)
mysql> insert into DemoTable(Value) values('P');
查询成功,受影响行数为1(0.19秒)
mysql> insert into DemoTable(Value) values('A');
查询成功,受影响行数为1(0.11秒)
mysql> insert into DemoTable(Value) values('53');
查询成功,受影响行数为1(0.13秒)
mysql> insert into DemoTable(Value) values('R');
查询成功,受影响行数为1(0.12秒)
mysql> insert into DemoTable(Value) values('C');
查询成功,受影响行数为1(0.18秒)
mysql> insert into DemoTable(Value) values('190');
查询成功,受影响行数为1(0.12秒)
使用select语句显示表中的所有记录 –
mysql> select *from DemoTable;
这将产生以下输出 –
+----+-------+
| Id | Value |
+----+-------+
| 1 | 101 |
| 2 | P |
| 3 | A |
| 4 | 53 |
| 5 | R |
| 6 | C |
| 7 | 190 |
+----+-------+
7行在集合内(0.00秒)
以下是使用ORDER BY CASE对查询进行排序的查询 –
mysql> SELECT Id, Value FROM DemoTable ORDER BY CASE
WHEN Value REGEXP '[a-zA-Z]' THEN 0 ELSE 0+Value END ASC, Value;
这将产生以下输出 –
+----+-------+
| Id | Value |
+----+-------+
| 3 | A |
| 6 | C |
| 2 | P |
| 5 | R |
| 4 | 53 |
| 1 | 101 |
| 7 | 190 |
+----+-------+
7行在集合内(0.06秒)
阅读更多:MySQL 教程
极客教程