เมื่อต้องการหาความยาว (จำนวนตัวอักษร) ของคอลัมน์ข้อความ และรวมกันทั้งกลุ่ม ใช้ฟังก์ชัน CHAR_LENGTH() (นับตัวอักษร) ร่วมกับ SUM() และ WHERE ... IN เพื่อกรองเงื่อนไข
ตัวอย่างการใช้งาน
สร้างตารางและเพิ่มข้อมูล:
mysql> CREATE TABLE DemoTable1612 (FirstName VARCHAR(20), LastName VARCHAR(20));
mysql> INSERT INTO DemoTable1612 VALUES ('David', 'Brown'), ('John', 'Smith'), ('Bob', 'Taylor');
ดูข้อมูล:
mysql> SELECT * FROM DemoTable1612; +-----------+----------+ | FirstName | LastName | +-----------+----------+ | David | Brown | | John | Smith | | Bob | Taylor | +-----------+----------+
รวมความยาว FirstName ของแถวที่ LastName อยู่ในรายการ:
mysql> SELECT SUM(CHAR_LENGTH(FirstName))
-> FROM DemoTable1612
-> WHERE LastName IN ('Brown', 'Smith', 'Taylor');
ผลลัพธ์ (David=5, John=4, Bob=3 → รวม 12):
+-----------------------------+ | SUM(CHAR_LENGTH(FirstName)) | +-----------------------------+ | 12 | +-----------------------------+
CHAR_LENGTH vs LENGTH
| ฟังก์ชัน | นับ | ตัวอย่าง 'ไทย' | ตัวอย่าง 'English' |
|---|---|---|---|
| CHAR_LENGTH() / CHARACTER_LENGTH() | จำนวนตัวอักษร (Characters) | 3 | 7 |
| LENGTH() / OCTET_LENGTH() | จำนวน Bytes | 9 (UTF-8: 3 bytes/char) | 7 |
แนะนำใช้ CHAR_LENGTH() สำหรับนับความยาวข้อความที่มนุษย์อ่าน
การประยุกต์ใช้
- คำนวณขนาด Storage:
SUM(CHAR_LENGTH(col))ประมาณ Bytes - Validation:
WHERE CHAR_LENGTH(phone) != 10หาเบอร์ผิดรูปแบบ - Truncate:
LEFT(col, 50)ตัดให้ไม่เกิน 50 ตัวอักษร - Statistics: ความยาวเฉลี่ยชื่อ, ที่อยู่, คำอธิบาย
ฟังก์ชันสตริงที่เกี่ยวข้อง
| ฟังก์ชัน | คำอธิบาย |
|---|---|
| LENGTH(str) | ความยาวใน Bytes |
| CHAR_LENGTH(str) | ความยาวใน Characters |
| BIT_LENGTH(str) | ความยาวใน Bits |
| CONCAT_WS(sep, ...) | ต่อสตริงพร้อมตัวคั่น |
| SUBSTRING(str, pos, len) | ดึงส่วนย่อย |