MariaDB có INSTR()
và cũng là một LOCATE()
hàm số. Cả hai hàm dường như thực hiện chính xác cùng một việc - trả về vị trí của một chuỗi con trong một chuỗi.
Tuy nhiên, có một sự khác biệt.
Sự khác biệt
Chúng ta có thể thấy sự khác biệt giữa hai hàm này bằng cách xem cú pháp của chúng, cũng như một vài ví dụ.
Cú pháp
Cú pháp cho INSTR()
:
INSTR(str,substr)
Hai cú pháp được chấp nhận cho LOCATE()
:
LOCATE(substr,str)
LOCATE(substr,str,pos)
Ở đâu str
là chuỗi, substr
là chuỗi con cần tìm và pos
là vị trí để bắt đầu tìm kiếm.
Sự khác biệt giữa hai chức năng có thể được tóm tắt như sau:
-
LOCATE()
hàm chấp nhận hai đối số giống nhauINSTR()
chấp nhận, nhưng theo thứ tự ngược lại.
-
LOCATE()
hàm chấp nhận một đối số thứ ba tùy chọn để chỉ định vị trí bắt đầu cho tìm kiếm.INSTR()
hàm không chấp nhận đối số như vậy.
Vì vậy, LOCATE()
cung cấp chức năng bổ sung INSTR()
không cung cấp.
Ví dụ 1 - Sự khác biệt đầu tiên
Dưới đây là một ví dụ cho thấy thứ tự ngược lại trong đó hai hàm chấp nhận các đối số của chúng:
SELECT
INSTR('Disconnect', 'con'),
LOCATE('con', 'Disconnect');
Kết quả:
+----------------------------+-----------------------------+ | INSTR('Disconnect', 'con') | LOCATE('con', 'Disconnect') | +----------------------------+-----------------------------+ | 4 | 4 | +----------------------------+-----------------------------+
Ví dụ 2 - Sự khác biệt thứ hai
Dưới đây là một ví dụ cho thấy chức năng bổ sung mà LOCATE()
cung cấp hơn INSTR()
:
SELECT
INSTR('My cat is a good cat', 'cat') AS "INSTR()",
LOCATE('cat', 'My cat is a good cat') AS "LOCATE()",
LOCATE('cat', 'My cat is a good cat', 10) AS "LOCATE() with 3rd Argument";
Kết quả:
+---------+----------+----------------------------+ | INSTR() | LOCATE() | LOCATE() with 3rd Argument | +---------+----------+----------------------------+ | 4 | 4 | 18 | +---------+----------+----------------------------+
Ví dụ này nêu bật thực tế là LOCATE()
hàm cung cấp cho chúng ta một đối số thứ ba tùy chọn. Đối số này cho phép chúng tôi chỉ định vị trí bắt đầu cho tìm kiếm, có nghĩa là chúng tôi không bị giới hạn chỉ với lần xuất hiện đầu tiên trong toàn bộ chuỗi.