Sắp xếp theo ký tự cuối chuỗi trong MySQL với RIGHT()
Sử dụng hàm RIGHT(column, 2) trong mệnh đề ORDER BY để sắp xếp dựa trên 2 ký tự cuối của chuỗi.
Cú pháp
SELECT yourColumnName FROM yourTableName ORDER BY RIGHT(yourColumnName, 2);
Ví dụ: Sắp xếp CustomerId theo 2 số cuối
Tạo bảng:
mysql> CREATE TABLE OrderByLast2CharactersDemo (
-> CustomerId VARCHAR(20),
-> CustomerName VARCHAR(20)
-> );
Chèn dữ liệu (định dạng: Tên-2số):
mysql> INSERT INTO OrderByLast2CharactersDemo VALUES
('John-98', 'John'), ('Carol-91', 'Carol'), ('Bob-99', 'Bob'), ('David-67', 'David');
Dữ liệu gốc:
+------------+--------------+ | CustomerId | CustomerName | +------------+--------------+ | John-98 | John | | Carol-91 | Carol | | Bob-99 | Bob | | David-67 | David | +------------+--------------+
Trường hợp 1: Sắp xếp tăng dần (ASC)
mysql> SELECT CustomerId FROM OrderByLast2CharactersDemo ORDER BY RIGHT(CustomerId, 2);
Kết quả (67, 91, 98, 99):
+------------+ | CustomerId | +------------+ | David-67 | | Carol-91 | | John-98 | | Bob-99 | +------------+
Trường hợp 2: Sắp xếp giảm dần (DESC)
mysql> SELECT CustomerId FROM OrderByLast2CharactersDemo ORDER BY RIGHT(CustomerId, 2) DESC;
Kết quả (99, 98, 91, 67):
+------------+ | CustomerId | +------------+ | Bob-99 | | John-98 | | Carol-91 | | David-67 | +------------+
Ứng dụng thực tế
- Sắp xếp mã sản phẩm theo số serial cuối
- Sắp xếp mã nhân viên theo 2 chữ số cuối
- Phân loại theo hậu tố mã vùng, mã bưu chính
Lưu ý
RIGHT()trả về chuỗi, sắp xếp theo thứ tự từ điển (lexicographic)- Nếu 2 ký tự cuối là số, sắp xếp chuỗi '10' < '2' → cân nhắc
CAST(RIGHT(col,2) AS UNSIGNED) - Hiệu năng: Không dùng index, full table scan