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

Sắp xếp theo độ dài cột trong MySQL (ORDER BY LENGTH)

Sắp xếp bản ghi theo độ dài chuỗi trong MySQL

Sử dụng hàm LENGTH() (hoặc CHAR_LENGTH()) trong mệnh đề ORDER BY để sắp xếp các bản ghi dựa trên độ dài của giá trị cột.

Ví dụ minh họa

Tạo bảng DemoTable715:

mysql> CREATE TABLE DemoTable715 (UserMessage VARCHAR(100));
Query OK, 0 rows affected (0.56 sec)

Chèn dữ liệu:

mysql> INSERT INTO DemoTable715 VALUES('Aw');
Query OK, 1 row affected (0.49 sec)
mysql> INSERT INTO DemoTable715 VALUES('Awe');
Query OK, 1 row affected (0.13 sec)
mysql> INSERT INTO DemoTable715 VALUES('A');
Query OK, 1 row affected (0.19 sec)
mysql> INSERT INTO DemoTable715 VALUES('Awes');
Query OK, 1 row affected (0.18 sec)
mysql> INSERT INTO DemoTable715 VALUES('Awesom');
Query OK, 1 row affected (0.16 sec)
mysql> INSERT INTO DemoTable715 VALUES('Awesome');
Query OK, 1 row affected (0.19 sec)

Xem dữ liệu gốc:

mysql> SELECT * FROM DemoTable715;
+-------------+
| UserMessage |
+-------------+
| Aw          |
| Awe         |
| A           |
| Awes        |
| Awesom      |
| Awesome     |
+-------------+
6 rows in set (0.00 sec)

Sắp xếp tăng dần theo độ dài chuỗi:

mysql> SELECT * FROM DemoTable715 ORDER BY LENGTH(UserMessage);

Kết quả:

+-------------+
| UserMessage |
+-------------+
| A           |
| Aw          |
| Awe         |
| Awes        |
| Awesom      |
| Awesome     |
+-------------+
6 rows in set (0.00 sec)

Sắp xếp giảm dần (dài nhất lên đầu):

mysql> SELECT * FROM DemoTable715 ORDER BY LENGTH(UserMessage) DESC;

LENGTH() vs CHAR_LENGTH()

HàmĐếmVí dụ 'A'Ví dụ 'あ' (Unicode)
LENGTH()Số byte13 (UTF-8)
CHAR_LENGTH()Số ký tự11

Khuyến nghị: Dùng CHAR_LENGTH() cho dữ liệu Unicode/đa ngôn ngữ để đếm đúng số ký tự hiển thị.

Ứng dụng thực tế

  • Tìm mô tả ngắn nhất/dài nhất
  • Phân tích chất lượng dữ liệu (ví dụ: password quá ngắn)
  • Sắp xếp tag, từ khóa, slug
  • Kết hợp với LIMIT để lấy top N: ORDER BY CHAR_LENGTH(col) DESC LIMIT 10