MariaDB JSON_CONTAINS() 函数使用指南
在 MariaDB 中,JSON_CONTAINS() 是一个内置函数,它检查一个 JSON 文档中是否包含另一个 JSON 文档。
如果您需要检查 JSON 文档中指定的路径下的是否存在数据,请使用 JSON_CONTAINS_PATH() 函数。
MariaDB JSON_CONTAINS() 语法
这里是 MariaDB JSON_CONTAINS() 的语法:
JSON_CONTAINS(target_json, candidate_json)
JSON_CONTAINS(target_json, candidate_json, path)
参数
target_json- 必需的。一个 JSON 文档。
candidate_json- 必需的。被包含的 JSON 文档。
path- 可选的。一个路径表达式。
如果您提供了错误数量的参数,MariaDB 将报告一个错误: ERROR 1582 (42000): Incorrect parameter count in the call to native function 'JSON_CONTAINS'。
返回值
如果在 JSON 文档 target_json 中包含了 JSON 文档 candidate_json,JSON_CONTAINS() 函数将返回 1,否则返回 0。如果提供了 path 参数,则检查由 path 匹配的部分是否包含 candidate_json JSON 文档。
如果存在以下的情况, JSON_CONTAINS() 函数将返回 NULL:
- 如果 JSON 文档中不存在指定的路径。
- 如果任意一个参数为
NULL。
JSON_CONTAINS() 函数将在以下情况下返回错误:
- 如果参数
json不是有效的 JSON 文档,MySQL 将会给出错误。您可以使用JSON_VALID()验证 JSON 文档的有效性。 - 如果参数
path不是有效的路径表达式, MariaDB 将会给出错误。
MariaDB JSON_CONTAINS() 示例
这里列出了几个常见的 JSON_CONTAINS() 用法示例。
示例: 数组
SET @json_doc = '[1, 2, {"x": 3}]';
SELECT
@json_doc AS 'JSON',
JSON_CONTAINS(@json_doc, '1') AS `1`,
JSON_CONTAINS(@json_doc, '{"x": 3}') AS `{"x": 3}`,
JSON_CONTAINS(@json_doc, '3') AS `3`;
输出:
+------------------+------+----------+------+
| JSON | 1 | {"x": 3} | 3 |
+------------------+------+----------+------+
| [1, 2, {"x": 3}] | 1 | 1 | 0 |
+------------------+------+----------+------+示例: 指定路径
SET @json_doc = '[1, 2, [3, 4]]';
SELECT
JSON_CONTAINS(@json_doc, '2'),
JSON_CONTAINS(@json_doc, '2', '$[2]');
输出:
+-------------------------------+---------------------------------------+
| JSON_CONTAINS(@json_doc, '2') | JSON_CONTAINS(@json_doc, '2', '$[2]') |
+-------------------------------+---------------------------------------+
| 1 | 0 |
+-------------------------------+---------------------------------------+这里,我们已经在 JSON_CONTAINS('[1, 2, [3, 4]]', '2', '$[2]') 指定了路径表达式 $[2],它将在 [3, 4] 中搜索 2。 [3, 4] 中没有包含 2, 因此,它返回了 0。
示例: 对象
SET @json_doc = '{"x":1,"y":[1,2]}';
SELECT
@json_doc AS 'JSON',
JSON_CONTAINS(@json_doc, '{"x":1}') AS '{"x":1}',
JSON_CONTAINS(@json_doc, '1', '$.y') AS '1 in $.y';
输出:
+-------------------+---------+----------+
| JSON | {"x":1} | 1 in $.y |
+-------------------+---------+----------+
| {"x":1,"y":[1,2]} | 1 | 1 |
+-------------------+---------+----------+NULL 参数
如果任何参数为 NULL,则 MariaDB JSON_CONTAINS() 函数将返回NULL:
SET @json_doc = '{"x":1,"y":[1,2]}';
SELECT
JSON_CONTAINS(@json_doc, NULL),
JSON_CONTAINS(NULL, NULL);
输出:
+--------------------------------+---------------------------+
| JSON_CONTAINS(@json_doc, NULL) | JSON_CONTAINS(NULL, NULL) |
+--------------------------------+---------------------------+
| NULL | NULL |
+--------------------------------+---------------------------+结论
在 MariaDB 中,JSON_CONTAINS() 是一个内置函数,它检查一个 JSON 文档中是否包含另一个 JSON 文档。