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

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

Để sắp xếp đúng thứ tự số cho giá trị như '2X', '2Y', '2Z', '100X', '100Y', '100Z', dùng ORDER BY (col+0), RIGHT(col, 1).

Tạo bảng và dữ liệu

mysql> CREATE TABLE DemoTable (StudentId VARCHAR(100));
Query OK, 0 rows affected (0.52 sec)
mysql> INSERT INTO DemoTable VALUES('2X'), ('100Y'), ('100X'), ('2Z'), ('2Y'), ('100Z');
Query OK, 6 rows affected (0.21 sec)

Truy vấn sắp xếp alphanumeric

mysql> SELECT * FROM DemoTable ORDER BY (StudentId + 0), RIGHT(StudentId, 1);

Kết quả:

+-----------+
| StudentId |
+-----------+
| 2X        |
| 2Y        |
| 2Z        |
| 100X      |
| 100Y      |
| 100Z      |
+-----------+
6 rows in set, 6 warnings (0.00 sec)

Giải thích:

  • StudentId + 0: ép kiểu chuỗi sang số, lấy phần số đầu ('2X'→2, '100Y'→100). Cảnh báo "Truncated incorrect DOUBLE value" là bình thường.
  • RIGHT(StudentId, 1): lấy ký tự cuối (X, Y, Z) để sắp xếp phụ

Cách chuẩn hơn (MySQL 8.0): ORDER BY CAST(StudentId AS UNSIGNED), SUBSTRING(StudentId, LENGTH(CAST(StudentId AS UNSIGNED)) + 1)