MariaDB JSON_CONTAINS_PATH() 函数使用指南
在 MariaDB 中,JSON_CONTAINS_PATH() 是一个内置函数,它用于检查一个 JSON 文档中在给定的路径上是否有值存在。
您还可以使用 JSON_EXISTS() 函数检查一个 JSON 文档中是否存在一个路径。
您还可以使用 JSON_CONTAINS() 函数检查一个 JSON 文档中是否存在一个值。
MariaDB JSON_CONTAINS_PATH() 语法
这里是 MariaDB JSON_CONTAINS_PATH() 的语法:
JSON_CONTAINS_PATH(json_doc, one_or_all, path[, path])
参数
json_doc- 必需的。一个 JSON 文档。
one_or_all- 必需的。可用值:
'one','all'。它指示是否检查所有的路径。 path- 必需的。您应该至少指定一个路径表达式。
如果您提供了错误数量的参数,MariaDB 将报告一个错误: ERROR 1582 (42000): Incorrect parameter count in the call to native function 'JSON_CONTAINS_PATH'。
返回值
如果 JSON 文档在指定的路径上有值,MariaDB JSON_CONTAINS_PATH() 函数将返回 1,否则返回 0。
JSON_CONTAINS_PATH() 根据 one_or_all 参数决定是否检查所有的路径:
- 如果是
'one',且至少有一个路径上有值,JSON_CONTAINS_PATH()函数将返回1,否则返回0。 - 如果是
'all',且所有的路径上有值,JSON_CONTAINS_PATH()函数将返回1,否则返回0。
如果任意一个参数为 NULL, JSON_CONTAINS_PATH() 函数将返回 NULL。
MariaDB JSON_CONTAINS_PATH() 示例
下面几个示例展示了 MariaDB JSON_CONTAINS_PATH() 函数的用法。
单个路径
要检查一个 JSON 文档中是否存在指定的路径,请使用下面的语句:
SET @json_doc = '[1, 2, {"x": 3}]';
SELECT
JSON_CONTAINS_PATH(@json_doc, 'all', '$[0]') AS `$[0]`,
JSON_CONTAINS_PATH(@json_doc, 'all', '$[3]') AS `$[3]`,
JSON_CONTAINS_PATH(@json_doc, 'all', '$[2].x') AS `$[2].x`;
输出:
+------+------+--------+
| $[0] | $[3] | $[2].x |
+------+------+--------+
| 1 | 0 | 1 |
+------+------+--------+如果只有一个参数,第二个参数使用 'one' 或者 'all' 都会获得同样的结果,如下:
SET @json_doc = '[1, 2, {"x": 3}]';
SELECT
JSON_CONTAINS_PATH(@json_doc, 'one', '$[0]') AS `$[0]`,
JSON_CONTAINS_PATH(@json_doc, 'one', '$[3]') AS `$[3]`,
JSON_CONTAINS_PATH(@json_doc, 'one', '$[2].x') AS `$[2].x`;
输出:
+------+------+--------+
| $[0] | $[3] | $[2].x |
+------+------+--------+
| 1 | 0 | 1 |
+------+------+--------+示例: one vs all
下面的示例展示了如果您提供多个路径会发生什么;
SET @json_doc = '[1, 2, {"x": 3}]';
SELECT
JSON_CONTAINS_PATH(@json_doc, 'one', '$[3]', '$[0]') AS `one`,
JSON_CONTAINS_PATH(@json_doc, 'all', '$[0]', '$[3]') AS `all`;
输出:
+------+------+
| one | all |
+------+------+
| 1 | 0 |
+------+------+在这个示例中,JSON 文档 '[1, 2, {"x": 3}]' 存在 $[0] 路径,不存在路径 '$[3]。 第一个函数使用了 one 参数,因此返回了 1。 第二个函数使用了 all 参数,因此返回了 0。
NULL 参数
如果任何参数为 NULL,则 MariaDB JSON_CONTAINS_PATH() 返回 NULL:
SELECT
JSON_CONTAINS_PATH(null, 'one', '$'),
JSON_CONTAINS_PATH('', null, '$');
输出:
+--------------------------------------+-----------------------------------+
| JSON_CONTAINS_PATH(null, 'one', '$') | JSON_CONTAINS_PATH('', null, '$') |
+--------------------------------------+-----------------------------------+
| NULL | NULL |
+--------------------------------------+-----------------------------------+结论
在 MariaDB 中,JSON_CONTAINS_PATH() 是一个内置函数,它用于检查一个 JSON 文档中在给定的路径上是否有值存在。