Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Cách hoạt động của hàm LOCATE () trong MySQL

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 |
+------+------+------+

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Làm cách nào để hiển thị lỗi cho truy vấn MySQLi của tôi?

  2. Theo dõi Percona XtraDB Cluster - Các chỉ số chính

  3. Tôi có phải đề phòng việc tiêm SQL nếu tôi sử dụng trình đơn thả xuống không?

  4. Hướng dẫn thiết kế cơ sở dữ liệu cho thông báo trong MySQL

  5. Tìm kiếm không phân biệt dấu phụ trong MySQL (dấu tiếng Tây Ban Nha)