Trong MySQL, LOCATE()
hàm trả về vị trí của một chuỗi con trong một chuỗi. Cụ thể hơn, nó trả về vị trí của lần xuất hiện đầu tiên trong chuỗi hoặc lần xuất hiện đầu tiên sau một điểm bắt đầu nhất định.
Cú pháp
Nó có thể được sử dụng theo một trong các cách sau:
LOCATE(substr,str) LOCATE(substr,str,pos)
Ở đâu substr
là chuỗi con để định vị và str
là chuỗi để tìm kiếm.
Khi sử dụng cú pháp thứ hai, pos
là vị trí để bắt đầu tìm kiếm.
Ví dụ 1 - Cú pháp đầu tiên
Dưới đây là một ví dụ sử dụng cú pháp đầu tiên:
SELECT LOCATE('cat', 'One cat jumped over the other cat') AS Result;
Kết quả:
+--------+ | Result | +--------+ | 5 | +--------+
Ví dụ 2 - Cú pháp thứ hai
Dưới đây là một ví dụ mà chúng tôi chỉ định một vị trí bắt đầu để bắt đầu tìm kiếm:
SELECT LOCATE('cat', 'One cat jumped over the other cat', 6) AS Result;
Kết quả:
+--------+ | Result | +--------+ | 31 | +--------+
Trong trường hợp này, lần xuất hiện đầu tiên của cat
bắt đầu ở vị trí 5, nhưng tôi đã chỉ định tìm kiếm bắt đầu ở vị trí 6. Do đó, vị trí của lần xuất hiện tiếp theo của chuỗi đó là vị trí đã được trả về.
Lưu ý rằng, mặc dù tìm kiếm bắt đầu ở vị trí 6, hàm vẫn trả về vị trí của chuỗi con trong chuỗi - không phải từ vị trí bắt đầu.
Dưới đây là một ví dụ khác để giúp làm rõ ràng hơn điều này.
SELECT LOCATE('c', 'a b c', 1) AS 'Result 1', LOCATE('c', 'a b c', 2) AS 'Result 2', LOCATE('c', 'a b c', 4) AS 'Result 3';
Kết quả:
+----------+----------+----------+ | Result 1 | Result 2 | Result 3 | +----------+----------+----------+ | 5 | 5 | 5 | +----------+----------+----------+
Kết quả là như nhau cho dù chúng ta bắt đầu tìm kiếm ở đâu.
Ví dụ 3 - Định vị một phần của từ
Chuỗi con có thể là một phần của một từ dài hơn:
SELECT LOCATE('sing', 'Increasingly') AS Result;
Kết quả:
+--------+ | Result | +--------+ | 7 | +--------+
Trên thực tế, không có yêu cầu nào đối với nó thậm chí là một từ (xét cho cùng, chúng tôi chỉ đơn giản là tìm kiếm một chuỗi):
SELECT LOCATE('z23!#', 'u_4, z23!#') AS 'Result 1', LOCATE(' ', 'a b c') AS 'Result 2', LOCATE(',', 'cat, dog, bird') AS 'Result 3';
Kết quả:
+----------+----------+----------+ | Result 1 | Result 2 | Result 3 | +----------+----------+----------+ | 6 | 2 | 4 | +----------+----------+----------+
Ví dụ 4 - Không có Kết quả phù hợp nào
Nếu không tìm thấy chuỗi con, 0 được trả lại:
SELECT LOCATE('Bat', 'Increasingly') AS Result;
Kết quả:
+--------+ | Result | +--------+ | 0 | +--------+
Ví dụ 5 - Phân biệt chữ hoa chữ thường
Hàm này an toàn nhiềubyte và chỉ phân biệt chữ hoa chữ thường nếu ít nhất một đối số là chuỗi nhị phân.
Do đó, những điều sau đây hoạt động trên chuỗi không nhị phân, ngay cả khi trường hợp không khớp:
SELECT LOCATE('Sing', 'Increasingly') AS Result;
Kết quả:
+--------+ | Result | +--------+ | 7 | +--------+
Nhưng nếu chúng ta sử dụng một chuỗi nhị phân, điều này sẽ xảy ra:
SET @str = BINARY 'Increasingly'; SELECT LOCATE('Sing', @str) AS Result;
Kết quả:
+--------+ | Result | +--------+ | 0 | +--------+
Nhưng tất nhiên, nếu chúng tôi thay đổi nó để trường hợp khớp với nhau, chúng tôi sẽ nhận được một kết quả phù hợp:
SET @str = BINARY 'Increasingly'; SELECT LOCATE('sing', @str) AS Result;
Kết quả:
+--------+ | Result | +--------+ | 7 | +--------+
Ví dụ 6 - Đối số NULL
Nếu bất kỳ đối số nào là NULL
,
NULL
được trả lại:
SELECT LOCATE(NULL, 'Increasingly') a, LOCATE('Bat', NULL) b, LOCATE('Bat', 'Increasingly', NULL) c;
Kết quả:
+------+------+------+ | a | b | c | +------+------+------+ | NULL | NULL | NULL | +------+------+------+