JSON_CONTAINS()

JSON_CONTAINS(target, candidate, path) 在 candidate JSON 值包含于指定路径下的 target 文档中时返回 1,否则返回 0。

描述

JSON_CONTAINS(target, candidate) 判断 candidate 是否包含在 target 中。一个数组包含在另一个数组中,当且仅当 candidate 的每个元素都出现在 target 中。一个对象包含在另一个对象中,当且仅当 candidate 的每个键值对都出现在 target 中。

当提供可选的 path 参数时,仅在该路径找到的值上判断包含关系。路径的求值语义与其他 MySQL JSON 函数一致;不存在的路径返回 SQL NULL

数值在整数、小数和浮点表示之间相等时可跨类型比较;非数值的标量类型必须完全匹配。

语法

JSON_CONTAINS(target, candidate [, path])

参数

参数

说明

target

要搜索的 JSON 文档(或兼容 JSON 的字符串)。

candidate

要查找的 JSON 文档。

path

可选。限制包含关系判断范围的 JSON 路径表达式。

返回值

如果 candidate 包含在 target 中则返回 1,否则返回 0。任一参数为 SQL NULL,或可选路径不存在时,返回 SQL NULL。JSON 文档或 JSON 路径无效时会报错。

示例

DROP DATABASE IF EXISTS json_contains_demo;
CREATE DATABASE json_contains_demo;
USE json_contains_demo;

SELECT JSON_CONTAINS('{"a": 1, "b": 2, "c": {"d": 4}}', '1', '$.a') AS has_a;
SELECT JSON_CONTAINS('[1,2,3]', '[1,3]') AS contains_1_and_3;
SELECT JSON_CONTAINS('{"tags":["x","y"]}', '"x"', '$.tags') AS has_x;

CREATE TABLE t_json_contains (id INT, doc VARCHAR(200));
INSERT INTO t_json_contains VALUES
    (1, '{"type":"doc","tags":["x","y"]}'),
    (2, '{"type":"page","tags":["z"]}');
SELECT id, JSON_CONTAINS(doc, '"doc"', '$.type') AS is_doc FROM t_json_contains ORDER BY id;

DROP DATABASE json_contains_demo;