Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> MySQL

Sắp xếp cột alphanumeric có độ dài khác nhau trong MySQL

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.