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

นับจำนวน Comma ในคอลัมน์ MySQL ด้วย LENGTH และ REPLACE

นับอักขระเฉพาะ (Comma) ในสตริง: สูตร LENGTH - LENGTH(REPLACE)

หลักการ: ความยาวเดิม - ความยาวหลังลบ Comma ออก = จำนวน Comma

ไวยากรณ์

SELECT LENGTH(column) - LENGTH(REPLACE(column, ',', '')) AS comma_count FROM table;

สร้างตารางและข้อมูล

mysql> CREATE TABLE DemoTable1510 (Value VARCHAR(50));
Query OK, 0 rows affected (6.75 sec)

mysql> INSERT INTO DemoTable1510 VALUES
    -> ('20,35'), ('45,67,89'), ('90,97,101,190');
Query OK, 3 rows affected

ข้อมูลทั้งหมด

+---------------+
| Value         |
+---------------+
| 20,35         |
| 45,67,89      |
| 90,97,101,190 |
+---------------+

คำสั่งนับ Comma

mysql> SELECT LENGTH(Value) - LENGTH(REPLACE(Value, ',', '')) AS NumberOfComma
    -> FROM DemoTable1510;

ผลลัพธ์

+---------------+
| NumberOfComma |
+---------------+
|             1 |
|             2 |
|             3 |
+---------------+

การคำนวณยืนยัน

ValueLENGTHREPLACE(',', '')LENGTH หลัง Replaceผลต่าง
20,355203541
45,67,89845678962
90,97,101,190139097101190103

ประยุกต์ใช้: นับจำนวน Item ใน Comma-Separated List

SELECT 
    Value,
    LENGTH(Value) - LENGTH(REPLACE(Value, ',', '')) + 1 AS item_count
FROM DemoTable1510;

ผลลัพธ์ (Item Count = Comma + 1)

+---------------+------------+
| Value         | item_count |
+---------------+------------+
| 20,35         |          2 |
| 45,67,89      |          3 |
| 90,97,101,190 |          4 |
+---------------+------------+

⚠️ ข้อควรระวัง

  • ทำงานกับ CHAR, VARCHAR, TEXT ได้
  • LENGTH() นับเป็น Byte (UTF-8 ตัวอักษรไทย = 3 Bytes) → ใช้ CHAR_LENGTH() หากนับตัวอักษร
  • สำหรับ Comma (ASCII 1 Byte) ใช้ LENGTH ได้ถูกต้อง
  • หากข้อมูลมี Comcha ท้าย (Trailing) เช่น 'a,b,' → นับได้ 2 Comma = 3 Items (Item ท้ายว่าง)

MySQL 8.0: ใช้ REGEXP_COUNT (ถ้ามี)

-- MySQL 8.0 ไม่มี REGEXP_COUNT ต้องใช้ UDF หรือ workaround นี้ต่อไป