Computer >> Máy Tính >  >> Lập trình >> MySQL

Truy vấn MySQL để sắp xếp theo ký tự chuỗi cuối cùng nhất định?


Đối với điều này, bạn có thể sử dụng câu lệnh CASE. Để sắp xếp, hãy sử dụng mệnh đề ORDER BY. Đầu tiên chúng ta hãy tạo một bảng -

mysql> create table DemoTable
   -> (
   -> ClientId int NOT NULL AUTO_INCREMENT PRIMARY KEY,
   -> ClientName varchar(20)
   -> );
Query OK, 0 rows affected (0.54 sec)

Chèn một số bản ghi trong bảng bằng lệnh chèn. Một số bản ghi có chuỗi cuối cùng nhất định như -D, v.v. -

mysql> insert into DemoTable(ClientName) values('Mike');
Query OK, 1 row affected (0.11 sec)
mysql> insert into DemoTable(ClientName) values('John');
Query OK, 1 row affected (0.22 sec)
mysql> insert into DemoTable(ClientName) values('John-D');
Query OK, 1 row affected (0.15 sec)
mysql> insert into DemoTable(ClientName) values('John-Smith');
Query OK, 1 row affected (0.18 sec)
mysql> insert into DemoTable(ClientName) values('Mike-Smith');
Query OK, 1 row affected (0.15 sec)
mysql> insert into DemoTable(ClientName) values('Mike-D');
Query OK, 1 row affected (0.15 sec)

Hiển thị tất cả các bản ghi từ bảng bằng câu lệnh select -

mysql> select *from DemoTable;

Điều này sẽ tạo ra kết quả sau -

+----------+------------+
| ClientId | ClientName |
+----------+------------+
|        1 | Mike       |
|        2 | John       |
|        3 | John-D     |
|        4 | John-Smith |
|        5 | Mike-Smith |
|        6 | Mike-D     |
+----------+------------+
6 rows in set (0.00 sec)

Đây là truy vấn để sắp xếp theo ký tự chuỗi cuối cùng nhất định -

mysql> select
   -> case
   -> when right(ClientName,length(ClientName)-instr(ClientName,'-')) = `ClientName` THEN ''
   -> else right(`ClientName`,length(`ClientName`)-INSTR(`ClientName`,'-'))
   -> end as `last`,
   -> `ClientName`
   -> from
   -> DemoTable
   -> ORDER BY
   -> `last`,`ClientName`;

Điều này sẽ tạo ra kết quả sau -

+-------+------------+
| last  | ClientName |
+-------+------------+
|       | John       |
|       | Mike       |
| D     | John-D     |
| D     | Mike-D     |
| Smith | John-Smith |
| Smith | Mike-Smith |
+-------+------------+
6 rows in set (0.00 sec)