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

JSON_CONTAINS () Ví dụ trong MySQL

Trong MySQL, JSON_CONTAINS() chức năng kiểm tra xem giá trị được chỉ định có được tìm thấy trong tài liệu JSON đã cho hay không, tùy chọn, tại đường dẫn được chỉ định trong tài liệu.

Nếu giá trị được tìm thấy, JSON_CONTAINS() trả về 1 , nếu không nó trả về 0 .

Cú pháp

Cú pháp như sau:

JSON_CONTAINS(target, candidate[, path])

Hàm trả về 1 hoặc 0 tùy thuộc vào việc có một candidate nhất định hay không Tài liệu JSON được chứa trong target Tài liệu JSON hoặc — if a path đối số đã được cung cấp — liệu ứng cử viên có được tìm thấy ở một đường dẫn cụ thể trong mục tiêu hay không.

Ví dụ 1 - Hai đối số

Dưới đây là một ví dụ để chứng minh cách sử dụng cơ bản mà không chỉ định đường dẫn (tức là chỉ cung cấp hai đối số).

SET @doc1 = '{"a": 1, "b": 2, "c": {"d": 3}}';
SET @doc2 = '{"c": {"d": 3}}';
SELECT JSON_CONTAINS(@doc1, @doc2) AS Result;

Kết quả:

+--------+
| Result |
+--------+
|      1 |
+--------+

Lưu ý dấu ngoặc nhọn xung quanh đối số thứ hai. Đây là những yêu cầu bắt buộc để làm cho nó trở thành JSON hợp lệ. Nếu chúng ta bỏ qua dấu ngoặc nhọn, chúng ta sẽ gặp lỗi:

SET @doc1 = '{"a": 1, "b": 2, "c": {"d": 3}}';
SET @doc2 = '"c": {"d": 3}';
SELECT JSON_CONTAINS(@doc1, @doc2) AS Result;

Kết quả:

ERROR 3141 (22032): Invalid JSON text in argument 2 to function json_contains: "The document root must not be followed by other values." at position 3.

Ví dụ 2 - Ba đối số

Trong ví dụ này, tôi thêm đối số thứ ba, để chỉ ra một đường dẫn cụ thể để tìm đối số thứ hai trong đối số đầu tiên.

SET @doc1 = '{"a": 1, "b": 2, "c": {"d": 3}}';
SET @doc2 = '1';
SELECT JSON_CONTAINS(@doc1, @doc2, '$.a') AS Result;

Kết quả:

+--------+
| Result |
+--------+
|      1 |
+--------+

Trong trường hợp này, đối số thứ hai được tìm thấy trong đối số đầu tiên tại đường dẫn được chỉ định bởi đối số thứ ba.

Nếu nó không được tìm thấy, chúng tôi sẽ kết thúc với điều này:

SET @doc1 = '{"a": 1, "b": 2, "c": {"d": 3}}';
SET @doc2 = '2';
SELECT JSON_CONTAINS(@doc1, @doc2, '$.a') AS Result;

Kết quả:

+--------+
| Result |
+--------+
|      0 |
+--------+

Ví dụ 3 - Ký hiệu dấu chấm

Bạn có thể sử dụng ký hiệu dấu chấm để chỉ ra các đường dẫn cụ thể trong tài liệu JSON.

SET @doc1 = '{"a": 1, "b": 2, "c": {"d": 3}}';
SET @doc2 = '3';
SELECT JSON_CONTAINS(@doc1, @doc2, '$.c.d') AS Result;

Kết quả:

+--------+
| Result |
+--------+
|      1 |
+--------+

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. CHỌN COUNT () so với mysql_num_rows ();

  2. Giới thiệu về Chỉ mục SQL

  3. Thông báo ClusterControl 1.4.1 - Phiên bản ProxySQL

  4. Mysql chèn ngày giờ ngẫu nhiên trong một phạm vi ngày giờ nhất định

  5. Có ANSI SQL thay thế cho từ khóa MYSQL LIMIT không?