Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MySQL

จัดเรียงข้อมูลตามความยาวสตริงในคอลัมน์ด้วย ORDER BY LENGTH() ใน MySQL

การเรียงลำดับตามความยาวข้อความด้วย LENGTH()

ฟังก์ชัน LENGTH(str) คืนค่าความยาวของสตริงในหน่วย **Byte** ใช้ร่วมกับ ORDER BY เพื่อเรียงจากสั้นไปยาว หรือยาวไปสั้น

Syntax

SELECT * FROM table_name ORDER BY LENGTH(column_name) [ASC|DESC];

ตัวอย่างการใช้งาน

สร้างตารางข้อความความยาวต่างกัน:

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

mysql> INSERT INTO DemoTable715 VALUES ('Aw'), ('Awe'), ('A'), ('Awes'), ('Awesom'), ('Awesome');
Query OK, 6 rows affected

ข้อมูลต้นฉบับ (เรียงตามลำดับ Insert):

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

เรียงจากสั้นไปยาว (ASC - ค่าเริ่มต้น):

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

เรียงจากยาวไปสั้น (DESC):

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

ฟังก์ชันเกี่ยวข้อง

  • CHAR_LENGTH() / CHARACTER_LENGTH() - นับเป็น **ตัวอักษร (Characters)** ไม่ใช่ Byte (สำคัญสำหรับ UTF-8)
  • LENGTH('ไทย') = 6 bytes, CHAR_LENGTH('ไทย') = 3 chars
  • ใช้ CHAR_LENGTH() สำหรับข้อความไทย/Unicode เพื่อความถูกต้อง

การประยุกต์ใช้

  • หาข้อความสั้นที่สุด/ยาวที่สุด: ORDER BY LENGTH(col) LIMIT 1
  • กรองความยาว: WHERE LENGTH(col) > 10
  • จัดกลุ่มตามความยาว: GROUP BY LENGTH(col)