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).