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

การนับจำนวนเครื่องหมายจุลภาคในคอลัมน์ค่าคั่นด้วยจุลภาค MySQL

เมื่อมีคอลัมน์เก็บค่าหลายค่าคั่นด้วยจุลภาค (Comma-Separated Values) การนับจำนวนจุลภาคจะช่วยทราบจำนวนรายการ (จำนวนรายการ = จำนวนจุลภาค + 1) สามารถคำนวณได้โดยเปรียบเทียบความยาวสตริงก่อนและหลังลบจุลภาคออก

หลักการคำนวณ

จำนวนจุลภาค = LENGTH(สตริงต้นฉบับ) - LENGTH(REPLACE(สตริงต้นฉบับ, ',', ''))

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

สร้างตารางและเพิ่มข้อมูล:

mysql> CREATE TABLE DemoTable1510 (Value VARCHAR(50));
mysql> INSERT INTO DemoTable1510 VALUES ('20,35');
mysql> INSERT INTO DemoTable1510 VALUES ('45,67,89');
mysql> INSERT INTO DemoTable1510 VALUES ('90,97,101,190');

ดูข้อมูล:

mysql> SELECT * FROM DemoTable1510;
+---------------+
| Value         |
+---------------+
| 20,35         |
| 45,67,89      |
| 90,97,101,190 |
+---------------+

คำนวณจำนวนจุลภาค:

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

ผลลัพธ์:

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

การประยุกต์ใช้: นับจำนวนรายการ

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

ผลลัพธ์: 2, 3, 4 รายการตามลำดับ

ข้อควรระวัง

  • วิธีนี้ทำงานได้ก็ต่อเมื่อไม่มีจุลภาคซ้อนกัน (เช่น 1,,2) หรือจุลภาคนำหน้า/ท้าย (เช่น ,1,2)
  • หากมีช่องว่างรอบจุลภาค (1, 2, 3) ให้ลบช่องว่างก่อน: REPLACE(REPLACE(Value, ', ', ','), ' ', '')
  • สำหรับ MySQL 8.0+ สามารถใช้ JSON_LENGTH ได้หากแปลงเป็น JSON Array ก่อน

แนวทางปฏิบัติที่ดีกว่า

หลีกเลี่ยงการเก็บค่าหลายค่าในคอลัมน์เดียว (Violates 1NF) ควร:

  • สร้างตารางเชื่อมโยง (Junction Table) แทน
  • ใช้ JSON Data Type (MySQL 5.7+) พร้อมฟังก์ชัน JSON_EXTRACT, JSON_LENGTH
  • หากต้องเก็บเป็นข้อความ ให้ใช้ตัวคั่นที่ไม่ปรากฏในข้อมูล (เช่น | หรือ ||)