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

MariaDB JSON_CONTAINS_PATH () Giải thích

Trong MariaDB, JSON_CONTAINS_PATH() là một hàm tích hợp cho biết liệu một tài liệu JSON nhất định có chứa dữ liệu tại đường dẫn hoặc đường dẫn được chỉ định hay không.

Nó trả về 1 nếu tài liệu có chứa dữ liệu tại / s đường dẫn được chỉ định, 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_PATH(json_doc, return_arg, path[, path] ...)

Ở đâu json_doc là tài liệu JSON và path chỉ định đường dẫn để tìm dữ liệu. Nhiều đường dẫn có thể được cung cấp.

return_arg đối số xác định cách xử lý với nhiều đường dẫn. Nó có thể là one hoặc all .

  • one - Hàm trả về 1 nếu có ít nhất một đường dẫn trong tài liệu JSON.
  • all - Hàm trả về 1 chỉ khi tất cả các đường dẫn tồn tại trong tài liệu JSON.

Ví dụ

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

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

SELECT JSON_CONTAINS_PATH(@json_document, 'one', '$.name');

Kết quả:

+-----------------------------------------------------+
| JSON_CONTAINS_PATH(@json_document, 'one', '$.name') |
+-----------------------------------------------------+
|                                                   1 |
+-----------------------------------------------------+

Trong trường hợp này, đường dẫn tồn tại và kết quả là 1 .

Trong ví dụ tiếp theo, đường dẫn không tồn tại và kết quả là 0 :

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

SELECT JSON_CONTAINS_PATH(@json_document, 'one', '$.type');

Kết quả:

+-----------------------------------------------------+
| JSON_CONTAINS_PATH(@json_document, 'one', '$.type') |
+-----------------------------------------------------+
|                                                   0 |
+-----------------------------------------------------+

Nhiều đường dẫn

Dưới đây là một số ví dụ tìm kiếm nhiều đường dẫn trong tài liệu:

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

SELECT JSON_CONTAINS_PATH(
        @json_document, 
        'one', 
        '$.type', 
        '$.weight'
        ) AS Result;

Kết quả:

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

Trong ví dụ này, chúng tôi đã tìm kiếm hai con đường. Một con đường tồn tại và con đường kia thì không. Nhưng chúng tôi có 1 anyway (một kết quả tích cực). Điều này là do chúng tôi đã sử dụng one như đối số thứ hai. one chỉ định rằng chúng ta sẽ nhận được 1 nếu có bất kỳ đường dẫn nào tồn tại.

Đây là những gì sẽ xảy ra nếu chúng tôi sử dụng all như đối số thứ hai:

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

SELECT JSON_CONTAINS_PATH(
    @json_document, 
    'all', 
    '$.type', 
    '$.weight'
    ) AS Result;

Kết quả:

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

Lần này kết quả là 0 , bởi vì không phải tất cả các đường dẫn đều tồn tại trong tài liệu JSON.

Nếu chúng tôi thay đổi đường dẫn bị thiếu ($.type ) với một cái tồn tại, chúng tôi nhận được một kết quả khác:

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

SELECT JSON_CONTAINS_PATH(
    @json_document, 
    'all', 
    '$.name', 
    '$.weight'
    ) AS Result;

Kết quả:

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

Mảng

Dưới đây là một ví dụ kiểm tra xem một chỉ mục nhất định có tồn tại trong một mảng hay không:

SET @json_document = '
    { 
        "name": "Wag", 
        "awards" : [ "Top Dog", "Best Dog", "Biggest Dog" ] 
    }
';

SELECT JSON_CONTAINS_PATH(
        @json_document, 
        'one', 
        '$.awards[2]'
        ) AS Result;

Kết quả:

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

Và đây là điều sẽ xảy ra nếu chúng tôi tăng chỉ mục lên chỉ mục không tồn tại:

SET @json_document = '
    { 
        "name": "Wag", 
        "awards" : [ "Top Dog", "Best Dog", "Biggest Dog" ] 
    }
';

SELECT JSON_CONTAINS_PATH(
        @json_document, 
        'one', 
        '$.awards[3]'
        ) AS Result;

Kết quả:

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

Cấu trúc lồng nhau

Dưới đây là một ví dụ tìm kiếm một đường dẫn trong một tài liệu lồng nhau:

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

SELECT JSON_CONTAINS_PATH(
    @json_document, 
    'one', 
    '$.specs.height'
    ) AS Result;

Kết quả:

+--------+
| Result |
+--------+
|      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_PATH(null, 'one', '$.weight') AS a,
    JSON_CONTAINS_PATH(@json_document, null, '$.weight') AS b,
    JSON_CONTAINS_PATH(@json_document, 'one', 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_PATH();

Kết quả:

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

Điều tương tự cũng xảy ra khi bạn không vượt qua đủ đối số:

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

SELECT JSON_CONTAINS_PATH(@json_document);

Kết quả:

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

  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ạy một cụm MariaDB Galera mà không có công cụ điều phối vùng chứa:Phần một

  2. Bản phát hành MariaDB AX mới với MariaDB ColumnStore 1.1.3 GA

  3. Cách FROM_UNIXTIME () hoạt động trong MariaDB

  4. Chạy một cụm MariaDB Galera mà không cần công cụ điều phối - Quản lý vùng chứa DB:Phần thứ hai

  5. Trả lại số ngày trong tháng bằng MariaDB