Tạo bảng và chèn mã sinh viên
mysql> CREATE TABLE DemoTable1623 (
-> StudentCode VARCHAR(20)
-> );
Query OK, 0 rows affected (0.47 sec)
mysql> INSERT INTO DemoTable1623 VALUES('STU-MIT-143');
mysql> INSERT INTO DemoTable1623 VALUES('STU-MIT-10');
mysql> INSERT INTO DemoTable1623 VALUES('STU-MIT-150');
mysql> INSERT INTO DemoTable1623 VALUES('STU-MIT-148');
Dữ liệu gốc (sắp xếp mặc định theo chuỗi)
mysql> SELECT * FROM DemoTable1623;
+-------------+
| StudentCode |
+-------------+
| STU-MIT-143 |
| STU-MIT-10 |
| STU-MIT-150 |
| STU-MIT-148 |
+-------------+
Truy vấn sắp xếp đúng theo số cuối
Tách phần tiền tố và phần số, chuyển phần số sang kiểu số để so sánh:
mysql> SELECT * FROM DemoTable1623
-> ORDER BY
-> SUBSTRING_INDEX(StudentCode, '-', 1),
-> SUBSTRING_INDEX(StudentCode, '-', -1) + 0;
Kết quả đã sắp xếp
+-------------+
| StudentCode |
+-------------+
| STU-MIT-10 |
| STU-MIT-143 |
| STU-MIT-148 |
| STU-MIT-150 |
+-------------+
Giải thích: SUBSTRING_INDEX(str, delim, count) tách chuỗi. + 0 ép kiểu sang số để so sánh số học thay vì từ điển.