ฟังก์ชัน FIND_IN_SET() ใช้เพื่อค้นหาตำแหน่ง (ลำดับ) ของค่าที่กำหนด (search value) ภายในชุดข้อความที่คั่นด้วยเครื่องหมายจุลภาค (comma-separated values) โดย
- หากพบ จะคืนค่าลำดับในตำแหน่งที่พบ (เริ่มจาก 1)
- หากไม่พบ จะคืนค่า
0 - หากค่าที่ค้นหาหรือชุดรายการเป็น
NULLจะคืนค่าNULL
ประโยชน์ของ FIND_IN_SET()
- ใช้กับคอลัมน์ที่เก็บค่าหลายค่าในรูปแบบ CSV เช่น
tag,skills,options - ช่วยให้สามารถค้นหาค่าที่อยู่ในรายการได้โดยไม่ต้องใช้
LIKE '%keyword%' - ใช้ร่วมกับ
ORDER BYเพื่อจัดลำดับตามความสำคัญที่กำหนดเอง
รูปแบบการใช้งาน
FIND_IN_SET(str, strlist)
strคือค่าที่ต้องการค้นหาstrlistคือข้อความที่เป็นรายการ (comma-separated string) เช่น'A,B,C'- ค่าทั้งสองต้องเป็น string และไม่ควรมีช่องว่างเกินจำเป็น
ตัวอย่างการใช้งาน
SQL
SELECT FIND_IN_SET('B', 'A,B,C'); -- ผลลัพธ์: 2
SELECT FIND_IN_SET('D', 'A,B,C'); -- ผลลัพธ์: 0
SELECT FIND_IN_SET(NULL, 'A,B,C'); -- ผลลัพธ์: NULL
SELECT FIND_IN_SET('B', NULL); -- ผลลัพธ์: NULLสมมุติว่ามีการดัดแปลงตาราง film ให้มีคอลัมน์ tags (เป็น string CSV เช่น 'Action,Drama,Comedy')
SQL
-- ค้นหาภาพยนตร์ที่มี tag เป็น 'Action'
SELECT title, tags
FROM film
WHERE FIND_IN_SET('Action', tags) > 0;ใช้เรียงลำดับภาพยนตร์ตามความสำคัญของ rating
SQL
SELECT title, rating
FROM film
ORDER BY FIND_IN_SET(rating, 'G,PG,PG-13,R,NC-17');- ฟังก์ชันจะคืนลำดับของค่า
ratingจากชุดG,PG,PG-13,... - ช่วยให้
ORDER BYไม่เรียงตามตัวอักษร แต่เรียงตามลำดับที่เราต้องการ