Giới thiệu
Khi cần sắp xếp kết quả dựa trên ký tự đầu tiên của một cột theo thứ tự tùy chỉnh, bạn có thể sử dụng mệnh đề ORDER BY CASE. Ví dụ dưới đây minh họa cách ưu tiên các hàng bắt đầu bằng chữ 'i'.
1. Tạo bảng
mysql> create table DemoTable1535 (
-> Value varchar(100)
-> );
Query OK, 0 rows affected (2.26 sec)
2. Chèn dữ liệu
mysql> insert into DemoTable1535 values('MySQL is good relational database.');
Query OK, 1 row affected (0.16 sec)
mysql> insert into DemoTable1535 values('is MySQL easy to lean');
Query OK, 1 row affected (0.35 sec)
mysql> insert into DemoTable1535 values('You need to start basic SQL');
Query OK, 1 row affected (0.35 sec)
3. Dữ liệu gốc
mysql> select * from DemoTable1535;
+------------------------------------+ | Value | +------------------------------------+ | MySQL is good relational database. | | is MySQL easy to lean | | You need to start basic SQL | +------------------------------------+ 3 rows in set (0.00 sec)
4. Truy vấn sắp xếp tùy chỉnh
Sử dụng LEFT(Value, 1) để lấy ký tự đầu tiên, sau đó dùng CASE gán thứ tự ưu tiên.
mysql> select * from DemoTable1535
-> order by case when left(Value, 1) = 'i' then 1 else 2 end, Value;
5. Kết quả
+------------------------------------+ | Value | +------------------------------------+ | is MySQL easy to lean | | MySQL is good relational database. | | You need to start basic SQL | +------------------------------------+ 3 rows in set (0.00 sec)
Giải thích:
- Hàng bắt đầu bằng 'i' (in thường) được gán giá trị 1 → lên đầu
- Các hàng còn lại gán giá trị 2 → sau đó sắp xếp theo thứ tự chữ cái bình thường (Value)
Mẹo: Có thể mở rộng CASE để xử lý nhiều ký tự hoặc chuỗi prefix phức tạp hơn.