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 文档中在给定的路径上是否有值存在。