Computer >> Máy Tính >  >> Lập trình >> MySQL

Sự khác biệt giữa các hàm MySQL LOCATE () và FIND_IN_SET () là gì?

Như chúng ta đã biết, cả hai hàm đều được sử dụng để tìm kiếm một chuỗi từ các đối số được cung cấp trong chúng nhưng có một số khác biệt đáng kể giữa chúng như sau

  • Hàm FIND_IN_SET () sử dụng danh sách chuỗi mà bản thân nó là một chuỗi chứa chuỗi con được phân tách bằng dấu phẩy. Trong khi đó, hàm LOCATE () chứa một chuỗi mà từ đó nó sẽ tìm vị trí xuất hiện đầu tiên của chuỗi con nếu có.
  • Trong hàm LOCATE (), chúng tôi có thể quản lý điểm bắt đầu của tìm kiếm bằng cách cung cấp đối số tùy chọn cho một vị trí. Trong khi đó, đối với hàm FIND_IN_SET (), MySQL không cung cấp loại linh hoạt như vậy và tìm kiếm theo mặc định sẽ bắt đầu từ chuỗi thứ nhất.
  • Trong trường hợp là số nguyên, hàm FIND_IN_SET () phù hợp hơn nhiều so với hàm LOCATE (). Có thể hiểu điều này qua ví dụ sau

Ví dụ

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)

Từ tập kết quả của các ví dụ trên, chúng ta có thể thấy rằng hàm LOCATE () trả về 1 thậm chí 2 vì một chuỗi không có trong các đối số. Nhưng hàm FIND_IN_SET () trả về 0 là câu trả lời đúng.