Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> MySQL

Sắp xếp theo chữ cái (không phải số) cho các giá trị cột chứa chuỗi có số như '456 John Smith' trong MySQL


Giới thiệu

Khi cần sắp xếp (ORDER BY) theo phần chữ cái của các chuỗi kết hợp số và văn bản (ví dụ: '456 John Smith'), bạn có thể sử dụng hàm SUBSTRING() kết hợp với LOCATE() để trích xuất phần tên bắt đầu từ dấu cách đầu tiên.

Tạo bảng và chèn dữ liệu mẫu

mysql> CREATE TABLE DemoTable (
    Id VARCHAR(100)
);
mysql> INSERT INTO DemoTable VALUES('456 John Smith');
mysql> INSERT INTO DemoTable VALUES('897 Adam Smith');
mysql> INSERT INTO DemoTable VALUES('1009 Bob Smith');

Xem dữ liệu ban đầu

mysql> SELECT * FROM DemoTable;

Kết quả:

+----------------+
| Id             |
+----------------+
| 456 John Smith |
| 897 Adam Smith |
| 1009 Bob Smith |
+----------------+

Truy vấn sắp xếp theo chữ cái (tên)

mysql> SELECT * FROM DemoTable 
ORDER BY SUBSTRING(Id, LOCATE(' ', Id));

Kết quả sau khi sắp xếp

+----------------+
| Id             |
+----------------+
| 897 Adam Smith |
| 1009 Bob Smith |
| 456 John Smith |
+----------------+

Giải thích

  • LOCATE(' ', Id) tìm vị trí của dấu cách đầu tiên trong chuỗi.
  • SUBSTRING(Id, ...) trích xuất chuỗi con bắt đầu từ vị trí đó (tức là phần tên).
  • MySQL sẽ sắp xếp dựa trên phần tên này thay vì toàn bộ chuỗi.

Lưu ý: Cách này giả định định dạng dữ liệu luôn có số ở đầu, theo sau là dấu cách, rồi tên. Nếu dữ liệu không nhất quán, bạn cần xử lý phức tạp hơn (ví dụ: dùng REGEXP hoặc làm sạch dữ liệu trước).