Khi cột chứa giá trị như 'S/TU/10', 'S/TU/100', 'S/TU/1000', sắp xếp mặc định (lexicographic) sẽ sai thứ tự số. Cần tách phần số để sắp xếp đúng.
Tạo bảng và dữ liệu
mysql> CREATE TABLE DemoTable (
-> StudentId VARCHAR(100)
-> );
Query OK, 0 rows affected (1.54 sec)
mysql> INSERT INTO DemoTable VALUES('S/TU/100'), ('S/TU/1000'), ('S/TU/10');
Query OK, 3 rows affected (0.22 sec)
Truy vấn sắp xếp đúng thứ tự số
mysql> SELECT StudentId FROM DemoTable
-> WHERE StudentId LIKE 'S%'
-> ORDER BY SUBSTRING(StudentId, 1, 9), SUBSTRING(StudentId, 10) * 1;
Kết quả:
+-----------+ | StudentId | +-----------+ | S/TU/10 | | S/TU/100 | | S/TU/1000 | +-----------+ 3 rows in set (0.00 sec)
Giải thích:
SUBSTRING(StudentId, 1, 9)lấy phần tiền tố cố định'S/TU/'(9 ký tự)SUBSTRING(StudentId, 10) * 1lấy phần còn lại và nhân 1 để chuyển thành số để sắp xếp số học