การเรียงลำดับตามความยาวข้อความด้วย 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)