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 | Đếm | Ví dụ 'A' | Ví dụ 'あ' (Unicode) |
|---|---|---|---|
LENGTH() | Số byte | 1 | 3 (UTF-8) |
CHAR_LENGTH() | Số ký tự | 1 | 1 |
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