JSON_CONTAINS_PATH()¶
JSON_CONTAINS_PATH(json, one_or_all, path…) 判断给定的 JSON 路径是否存在于文档中,根据模式返回“任一或全部路径存在”时的 1。
描述¶
JSON_CONTAINS_PATH(json, one_or_all, path [, path] ...) 返回 1 或 0,用于指示文档中是否存在指定的路径:
使用
'one'时,如果至少有一个路径存在,则返回1。使用
'all'时,如果所有路径都存在,则返回1。
模式字符串不区分大小写。如果第一个参数不是有效 JSON,则返回错误。文档或模式为 SQL NULL 时返回 SQL NULL。
路径按从左到右的顺序求值,并在结果确定后短路。'one' 模式下,前面的路径一旦命中,就直接返回 1,不再求值后续路径;'all' 模式下,前面的路径一旦不存在,就直接返回 0,不再求值后续路径。因此,结果已由前面的路径确定时,后续 SQL NULL 路径不会改变结果;如果在结果确定前求值到 SQL NULL 路径,则返回 SQL NULL。实际求值到无效 JSON 路径时会返回错误;如果前面的路径已经确定结果,后续无效路径不会被求值,也不会触发错误。
语法¶
JSON_CONTAINS_PATH(json, one_or_all, path [, path] ...)
参数¶
参数 |
说明 |
|---|---|
|
要判断的 JSON 文档。 |
|
取值 |
|
一个或多个要判断的 JSON 路径表达式。 |
返回值¶
根据请求的一个或多个路径是否存在,返回 1 或 0。
示例¶
DROP DATABASE IF EXISTS json_contains_path_demo;
CREATE DATABASE json_contains_path_demo;
USE json_contains_path_demo;
SELECT JSON_CONTAINS_PATH('{"a":true,"b":[1,2]}', 'all', '$.a', '$.b') AS all_exist;
SELECT JSON_CONTAINS_PATH('{"a":true}', 'one', '$.a', '$.missing') AS one_exists;
CREATE TABLE t_json_contains_path (id INT, doc JSON);
INSERT INTO t_json_contains_path VALUES (1, '{"a":1,"b":[1,2]}'), (2, '{"a":null}');
SELECT id, JSON_CONTAINS_PATH(doc, 'all', '$.a', '$.b[1]') AS all_exist FROM t_json_contains_path ORDER BY id;
DROP DATABASE json_contains_path_demo;