การนับจำนวนตัวอักษร/สัญลักษณ์เฉพาะในสตริง MySQL
ใช้สูตร: LENGTH(str) - LENGTH(REPLACE(str, 'target', '')) | ตรรกะ: ความยาวเดิม - ความยาวหลังลบตัวอักษรเป้าหมายออก = จำนวนครั้งที่เจอ
SELECT LENGTH(yourColumn) - LENGTH(REPLACE(yourColumn, 'targetChar', '')) FROM yourTable;
ตัวอย่างการใช้งาน
สร้างตารางและเพิ่มข้อมูลมีเครื่องหมาย ?:
mysql> create table DemoTable (Value varchar(200));
mysql> insert into DemoTable values('?1234?6789?5656?324?');
ข้อมูล: ?1234?6789?5656?324?
คิวรีนับจำนวน ?:
mysql> SELECT LENGTH(Value) - LENGTH(REPLACE(Value, '?', '')) from DemoTable;
+-----------------------------------------------+ | LENGTH(Value) - LENGTH(REPLACE(Value, '?', '')) | +-----------------------------------------------+ | 5 | +-----------------------------------------------+
การตรวจสอบ: สตริง ?1234?6789?5656?324? มี ? อยู่ 5 ตำแหน่ง (หน้า 1234, หน้า 6789, หน้า 5656, หน้า 324, ท้ายสุด)
ข้อควรระวัง:
LENGTH()นับเป็น **Byte** |CHAR_LENGTH()นับเป็น **Character** | สำหรับ ASCII (1 byte/char) ให้ผลลัพธ์เท่ากัน | สำหรับ UTF-8 ต้องใช้CHAR_LENGTH()แทน- หาก Target เป็น Multi-byte character ให้ใช้
CHAR_LENGTH()ทั้งคู่
การประยุกต์: นับหลายตัวอักษรพร้อมกัน (เช่น นับสระ a,e,i,o,u) ต้องทำซ้ำหรือใช้ REGEXP (MySQL 8.0+)