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

如果任意一个参数为 NULLJSON_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 文档中在给定的路径上是否有值存在。