การค้นหาค่าในสตริงที่คั่นด้วยจุลภาค (Comma-Separated Values)
เมื่อข้อมูลเก็บอยู่ในรูปแบบรายการคั่นด้วยจุลภาค (CSV) ในคอลัมน์เดียว เช่น '112,114,567,Java,345' สามารถใช้ฟังก์ชัน FIND_IN_SET() เพื่อค้นหาแถวที่มีค่าที่ต้องการอยู่ในรายการนั้นๆ ได้
ตัวอย่างสร้างตารางและข้อมูล
CREATE TABLE DemoTable (
ListOfValues VARCHAR(200)
);
เพิ่มข้อมูล:
INSERT INTO DemoTable VALUES
('112,114,567,Java,345'),
('222,214,256'),
('2,567,98,C');
ข้อมูลในตาราง
+----------------------+ | ListOfValues | +----------------------+ | 112,114,567,Java,345 | | 222,214,256 | | 2,567,98,C | +----------------------+
คำสั่งค้นหาแถวที่มีค่า '2' อยู่ในรายการ
SELECT * FROM DemoTable
WHERE FIND_IN_SET('2', ListOfValues) > 0;
ผลลัพธ์
+--------------+ | ListOfValues | +--------------+ | 2,567,98,C | +--------------+
คำอธิบาย: FIND_IN_SET('2', ListOfValues) จะคืนค่าตำแหน่ง (1-based index) ของค่า '2' ในสตริง ListOfValues หากพบ จะคืนค่า > 0 หากไม่พบคืนค่า 0
⚠ ข้อจำกัดและคำเตือน:
- FIND_IN_SET() ทำงานได้เฉพาะเมื่อค่าคั่นด้วยจุลภาค (,) เท่านั้น ไม่รองรับตัวคั่นอื่น
- ไม่สามารถใช้ดัชนี (Index) ได้ ทำให้ช้าบนตารางขนาดใหญ่
- ออกแบบฐานข้อมูลที่ดีควรแยกค่าออกเป็นตารางความสัมพันธ์ (Normalization) แทนการเก็บ CSV ในคอลัมน์เดียว
- MySQL 8.0+ แนะนำให้ใช้
JSON_CONTAINS()กับชนิดข้อมูล JSON แทน