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

ความแตกต่างระหว่าง MySQL LOCATE() และ FIND_IN_SET()

ทั้งสองฟังก์ชันใช้ค้นหาสตริงจากอาร์กิวเมนต์ แต่มีความแตกต่างสำคัญดังนี้:

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