Cả hai hàm đều tìm chuỗi từ đối số nhưng có khác biệt:
- FIND_IN_SET() dùng danh sách chuỗi là một chuỗi chứa các chuỗi con phân tách bằng dấu phẩy. LOCATE() dùng chuỗi gốc để tìm vị trí lần đầu tiên của chuỗi con.
- LOCATE() cho phép quản lý điểm bắt đầu tìm kiếm bằng đối số tùy chọn vị trí. FIND_IN_SET() không có tính linh hoạt này, tìm kiếm mặc định từ chuỗi đầu tiên.
- Với số nguyên, FIND_IN_SET() phù hợp hơn LOCATE(). Ví dụ minh họa:
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ừ kết quả, LOCATE() trả về 1 dù '2' không có như chuỗi riêng biệt, nhưng FIND_IN_SET() trả về 0 - đúng vì '2' không là phần tử trong danh sách phân tách dấu phẩy.