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])
参数¶
参数 |
说明 |
|---|---|
|
要搜索的 JSON 文档(或兼容 JSON 的字符串)。 |
|
要查找的 JSON 文档。 |
|
可选。限制包含关系判断范围的 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;