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

Sắp xếp cột alphanumeric (chữ số kết hợp) trong MySQL

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) * 1 lấy phần còn lại và nhân 1 để chuyển thành số để sắp xếp số học