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

MariaDB JSON_CONTAINS () Giải thích

Trong MariaDB, JSON_CONTAINS() là một chức năng tích hợp cho phép bạn tìm xem một giá trị được chỉ định có được tìm thấy trong tài liệu JSON đã cho hay tại một đường dẫn cụ thể trong tài liệu hay không.

Nó trả về 1 nếu nó chứa giá trị, 0 nếu không, và NULL nếu bất kỳ đối số nào là NULL .

Cú pháp

Cú pháp như sau:

JSON_CONTAINS(json_doc, val[, path])

Ở đâu json_doc là tài liệu JSON, val là giá trị cần tìm và path một giá trị tùy chọn chỉ định một đường dẫn trong tài liệu.

Ví dụ

Đây là một ví dụ để chứng minh.

SET @json_document = '{ "name": "Wag", "weight": 10 }';

SELECT JSON_CONTAINS(@json_document, '{"name": "Wag"}');

Kết quả:

+--------------------------------------------------+
| JSON_CONTAINS(@json_document, '{"name": "Wag"}') |
+--------------------------------------------------+
|                                                1 |
+--------------------------------------------------+

Trong trường hợp này, có một kết quả trùng khớp và kết quả là 1 .

Trong ví dụ tiếp theo, không có kết quả phù hợp nào:

SET @json_document = '{ "name": "Wag", "weight": 10 }';

SELECT JSON_CONTAINS(@json_document, '{"name": "Woof"}');

Kết quả:

+---------------------------------------------------+
| JSON_CONTAINS(@json_document, '{"name": "Woof"}') |
+---------------------------------------------------+
|                                                 0 |
+---------------------------------------------------+

Lưu ý rằng giá trị được đặt trong dấu ngoặc nhọn.

Đây là những gì sẽ xảy ra khi đối số thứ hai không hợp lệ:

SET @json_document = '{ "name": "Wag", "weight": 10 }';

SELECT JSON_CONTAINS(@json_document, 'Wag');

Kết quả:

+--------------------------------------+
| JSON_CONTAINS(@json_document, 'Wag') |
+--------------------------------------+
|                                 NULL |
+--------------------------------------+
1 row in set, 1 warning (0.000 sec)

Hãy xem cảnh báo:

SHOW WARNINGS;

Kết quả:

+---------+------+-----------------------------------------------------------------------------------+
| Level   | Code | Message                                                                           |
+---------+------+-----------------------------------------------------------------------------------+
| Warning | 4038 | Syntax error in JSON text in argument 2 to function 'json_contains' at position 1 |
+---------+------+-----------------------------------------------------------------------------------+

Chỉ định một đường dẫn

Bạn có thể tùy ý sử dụng đối số thứ ba để chỉ định một đường dẫn.

Ví dụ:

SET @json_document = '{ "name": "Wag", "weight": 10 }';

SELECT JSON_CONTAINS(@json_document, 10, '$.weight');

Kết quả:

+-----------------------------------------------+
| JSON_CONTAINS(@json_document, 10, '$.weight') |
+-----------------------------------------------+
|                                             1 |
+-----------------------------------------------+

Khi chỉ định một đường dẫn, tôi không cần sử dụng dấu ngoặc nhọn.

Đây là một tìm kiếm chuỗi:

SET @json_document = '{ "name": "Wag", "weight": 10 }';

SELECT JSON_CONTAINS(@json_document, '"Wag"', '$.name');

Kết quả:

+--------------------------------------------------+
| JSON_CONTAINS(@json_document, '"Wag"', '$.name') |
+--------------------------------------------------+
|                                                1 |
+--------------------------------------------------+

Lưu ý rằng tôi đã sử dụng dấu ngoặc kép bên trong dấu ngoặc kép. Nếu tôi bỏ qua dấu ngoặc kép, đây là điều sẽ xảy ra:

SET @json_document = '{ "name": "Wag", "weight": 10 }';

SELECT JSON_CONTAINS(@json_document, 'Wag', '$.name');

Kết quả:

+------------------------------------------------+
| JSON_CONTAINS(@json_document, 'Wag', '$.name') |
+------------------------------------------------+
|                                           NULL |
+------------------------------------------------+
1 row in set, 1 warning (0.000 sec)

Và hãy kiểm tra cảnh báo:

SHOW WARNINGS;

Kết quả:

+---------+------+-----------------------------------------------------------------------------------+
| Level   | Code | Message                                                                           |
+---------+------+-----------------------------------------------------------------------------------+
| Warning | 4038 | Syntax error in JSON text in argument 2 to function 'json_contains' at position 1 |
+---------+------+-----------------------------------------------------------------------------------+

Cấu trúc lồng nhau

Dưới đây là một ví dụ tìm kiếm giá trị trong tài liệu lồng nhau:

SET @json_document = '{ "name": "Wag", "specs": { "weight": 10, "height": 30 } }';

SELECT JSON_CONTAINS(@json_document, 30, '$.specs.height');

Kết quả:

+-----------------------------------------------------+
| JSON_CONTAINS(@json_document, 30, '$.specs.height') |
+-----------------------------------------------------+
|                                                   1 |
+-----------------------------------------------------+

Đối số rỗng

Nếu bất kỳ đối số nào là NULL , kết quả là NULL :

SET @json_document = '{ "name": "Wag", "weight": 10 }';
SELECT 
    JSON_CONTAINS(null, 10, '$.weight') AS a,
    JSON_CONTAINS(@json_document, null, '$.weight') AS b,
    JSON_CONTAINS(@json_document, 10, null) AS c;

Kết quả:

+------+------+------+
| a    | b    | c    |
+------+------+------+
| NULL | NULL | NULL |
+------+------+------+

Đếm tham số không chính xác

Không cung cấp đối số dẫn đến lỗi:

SELECT JSON_CONTAINS();

Kết quả:

ERROR 1582 (42000): Incorrect parameter count in the call to native function 'JSON_CONTAINS'

Điều này cũng xảy ra tương tự khi bạn cung cấp quá nhiều đối số:

SELECT JSON_CONTAINS('{ "a": 1}', 1, 2, 3);

Kết quả:

ERROR 1582 (42000): Incorrect parameter count in the call to native function 'JSON_CONTAINS'

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Hướng dẫn về MariaDB Columnstore dành cho quản trị viên MySQL

  2. Cách chuyển sang chữ hoa trong MariaDB

  3. Cách tự động hóa cụm Galera bằng ClusterControl CLI

  4. Chuyển đổi kết quả truy vấn thành danh sách được phân tách bằng dấu phẩy trong MariaDB

  5. Cách tạo một bản sao của Cụm cơ sở dữ liệu MySQL hoặc PostgreSQL của bạn