Trong MariaDB, LOCATE()
là một hàm chuỗi tích hợp trả về vị trí của lần xuất hiện đầu tiên của một chuỗi con trong một chuỗi khác.
LOCATE()
tương tự với INSTR()
, ngoại trừ LOCATE()
đó cung cấp tùy chọn chỉ định vị trí bắt đầu cho tìm kiếm. Ngoài ra, thứ tự đối số được đảo ngược giữa hai hàm này.
Cú pháp
LOCATE()
hàm hỗ trợ cú pháp hai đối số và cú pháp ba đối số.
Cú pháp hai đối số:
LOCATE(substr,str)
Cú pháp ba đối số:
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.
Ví dụ
Đây là một ví dụ cơ bản:
SELECT LOCATE('hot', 'The hot sun');
Kết quả:
+ ------------------------------ + | ĐỊA ĐIỂM ('nóng', 'Nắng nóng') | + ------------------------------ + | 5 | + ------------------------------ +
Vị trí bắt đầu
Dưới đây là một ví dụ về việc cung cấp vị trí bắt đầu cho tìm kiếm:
SELECT LOCATE('hot', 'The hot sun is really hot', 8);
Kết quả:
+ ---------------------------------------------- - + | ĐỊA ĐIỂM ('nóng', 'Trời nắng gắt', 8) | + ------------------------------- ----------------- + | 23 | + ----------------------------------------------- - +
Phân biệt chữ hoa chữ thường
LOCATE()
thực hiện tìm kiếm không phân biệt chữ hoa chữ thường:
SELECT LOCATE('HOT', 'The hot sun');
Kết quả:
+ ------------------------------ + | ĐỊA ĐIỂM ('HOT', 'The hot sun') | + ------------------------------ + | 5 | + ------------------------------ +
Nhiều lần xuất hiện
Nếu chuỗi con xảy ra nhiều lần, chỉ vị trí của chuỗi đầu tiên (từ vị trí bắt đầu) được trả về:
SELECT LOCATE('hot', 'The hot sun is really hot');
Kết quả:
+ -------------------------------------------- + | ĐỊA ĐIỂM ('nóng', 'Trời nắng nóng thật là nóng') | + --------------------------------- ----------- + | 5 | + -------------------------------------------- +Đây là vị trí bắt đầu:
SELECT LOCATE('hot', 'The hot sun is really hot', 20);
Kết quả:
+ ---------------------------------------------- - + | ĐỊA ĐIỂM ('nóng', 'Trời nắng gắt', 20) | + ------------------------------- ----------------- + | 23 | + ----------------------------------------------- - +Khớp một phần
Nếu chuỗi con là một phần của một từ lớn hơn, thì nó vẫn là một kết quả khớp:
SELECT LOCATE('hot', 'The hottest sun');
Kết quả:
+ ---------------------------------- + | ĐỊA ĐIỂM ('nóng', 'Mặt trời nóng nhất') | + ---------------------------------- + | 5 | + ---------------------------------- +Nhưng nếu chuỗi chỉ là một phần của chuỗi con, thì đó không phải là một chuỗi khớp:
SELECT LOCATE('hottest', 'The hot sun');
Kết quả:
+ ---------------------------------- + | ĐỊA ĐIỂM ('nóng nhất', 'Nắng nóng') | + ---------------------------------- + | 0 | + ---------------------------------- +Dấu cách
Ký tự khoảng trắng vẫn là một chuỗi, vì vậy chúng tôi có thể bao gồm khoảng trắng trong chuỗi con, ngay cả khi đó là ký tự duy nhất:
SELECT LOCATE(' ', 'The hot sun');
Kết quả:
+ ---------------------------- + | VỊ TRÍ ('', 'Nắng nóng') | + ---------------------------- + | 4 | + ---------------------------- +Chuỗi trống
Dưới đây là những gì sẽ xảy ra khi chuỗi con là một chuỗi rỗng:
SELECT LOCATE(' ', 'The hot sun');
Kết quả:
+ --------------------------- + | ĐỊA ĐIỂM ('', 'Nắng nóng') | + --------------------------- + | 1 | + --------------------------- +Không phù hợp
Nếu không tìm thấy chuỗi con trong chuỗi, hãy
LOCATE()
trả về0
:SELECT LOCATE('cold', 'The hot sun');
Kết quả:
+ ------------------------------- + | ĐỊA ĐIỂM ('lạnh', 'Nắng nóng') | + ------------------------------- + | 0 | + ------------------------------- +Đối số rỗng
Cung cấp
null
đối với bất kỳ đối số nào dẫn đếnnull
:SELECT LOCATE(null, 'The hot sun'), LOCATE('hot', null);
Kết quả:
+ ----------------------------- + ---------------- ----- + | ĐỊA ĐIỂM (null, 'The hot sun') | VỊ TRÍ ('hot', null) | + ----------------------------- + ---------- ----------- + | NULL | NULL | + ----------------------------- + ----------------- ---- +Cung cấp số lượng lập luận sai
Đang gọi
LOCATE()
với số lượng đối số sai hoặc không chuyển bất kỳ đối số nào dẫn đến lỗi:SELECT LOCATE('hot');
Kết quả:
ERROR 1582 (42000):Số lượng tham số không chính xác trong lệnh gọi hàm gốc 'LOCATE'