ทั้งสองฟังก์ชันใช้ค้นหาสตริงจากอาร์กิวเมนต์ แต่มีความแตกต่างสำคัญดังนี้:
- FIND_IN_SET() ใช้รายการสตริงที่เป็นสตริงเดียวคั่นด้วยจุลภาค ในขณะที่ INSTR() มีสตริงที่จะหาตำแหน่งการปรากฏครั้งแรกของสตริงย่อย
- ในกรณีของจำนวนเต็ม FIND_IN_SET() เหมาะสมกว่า INSTR() มาก สาธิตได้จากตัวอย่าง:
ตัวอย่าง
mysql> SELECT IF(INSTR('10,11,12,13', 2) > 0, 1, 0) AS Result;
+--------+
| Result |
+--------+
| 1 |
+--------+
1 row in set (0.05 sec)
mysql> SELECT IF(FIND_IN_SET(2, '10,11,12,13') > 0, 1, 0) AS Result;
+--------+
| Result |
+--------+
| 0 |
+--------+
1 row in set (0.00 sec)
จากชุดผลลัพธ์ INSTR() คืน 1 แม้ 2 จะไม่อยู่ในรายการ (เพราะเจอใน '12') แต่ FIND_IN_SET() คืน 0 ซึ่งเป็นคำตอบที่ถูกต้อง