ดังที่เราทราบ ทั้งสองฟังก์ชันใช้เพื่อค้นหาสตริงจากอาร์กิวเมนต์ที่ให้ไว้ แต่มีข้อแตกต่างที่สำคัญบางประการดังนี้
- FIND_IN_SET() ฟังก์ชั่นใช้รายการสตริงที่เป็นสตริงที่มีสตริงย่อยคั่นด้วยเครื่องหมายจุลภาค ในขณะที่ฟังก์ชัน LOCATE() มีสตริงที่จะค้นหาตำแหน่งของสตริงย่อยที่เกิดขึ้นครั้งแรก หากมี
- ในฟังก์ชัน LOCATE() เราสามารถจัดการจุดเริ่มต้นของการค้นหาโดยระบุอาร์กิวเมนต์ที่เป็นตัวเลือกสำหรับตำแหน่ง ในขณะที่สำหรับฟังก์ชัน FIND_IN_SET() MySQL ไม่ได้ให้ความยืดหยุ่นแบบนั้น และการค้นหาจะเริ่มต้นจากสตริงที่ 1 โดยค่าเริ่มต้น
- ในกรณีของจำนวนเต็ม FIND_IN_SET() จะเหมาะสมกว่าฟังก์ชัน LOCATE() มาก สามารถเข้าใจได้โดยตัวอย่างต่อไปนี้
ตัวอย่าง
mysql> Select IF(LOCATE(2,'10,11,12,13') > 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)
จากชุดผลลัพธ์ของตัวอย่างข้างต้น เราจะเห็นว่าฟังก์ชัน LOCATE() คืนค่า 1 ถึง 2 เนื่องจากไม่มีสตริงในอาร์กิวเมนต์ แต่ฟังก์ชัน FIND_IN_SET() คืนค่า 0 ซึ่งเป็นคำตอบที่ถูกต้อง