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

อะไรคือความแตกต่างระหว่างฟังก์ชัน MySQL LOCATE () และ FIND_IN_SET ()


ดังที่เราทราบ ทั้งสองฟังก์ชันใช้เพื่อค้นหาสตริงจากอาร์กิวเมนต์ที่ให้ไว้ แต่มีข้อแตกต่างที่สำคัญบางประการดังนี้

  • 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 ซึ่งเป็นคำตอบที่ถูกต้อง