当前位置:Gxlcms > 数据库问题 > Mysql Json函数之搜索 (三)

Mysql Json函数之搜索 (三)

时间:2021-07-01 10:21:17 帮助过:26人阅读

  • JSON_CONTAINS(targetcandidate[, path])

    通过返回1或0指示给定的candidateJSON文档是否包含在targetJSON文档中,或者(如果提供了path 参数)指示是否 在目标内的特定路径上找到候选对象。返回 NULL是否有任何参数为 NULL,或者path参数没有标识目标文档的一部分。如果发生错误 target或 candidate不是有效的JSON文档,或者如果path参数不是一个有效的路径表达式或包含一个 ***通配符。

    要仅检查路径中是否存在任何数据,请 JSON_CONTAINS_PATH()改用。

    以下规则定义了围堵:

    • 当且仅当候选标量可比较且相等时,才包含在目标标量中。如果两个标量值具有相同的JSON_TYPE()类型,则它们是可比较的,但 类型的值INTEGER 和DECIMAL也可彼此比较。

    • 当且仅当候选对象中的每个元素都包含在目标的某个元素中时,候选数组才包含在目标数组中。

    • 当且仅当候选非数组包含在目标的某些元素中时,该候选非数组才包含在目标数组中。

    • 当且仅当候选对象中的每个关键字在目标中存在一个具有相同名称的关键字并且与候选关键字相关联的值包含在与目标关键字相关联的值中时,候选对象才包含在目标对象中。

    否则,候选值将不包含在目标文档中。

    mysql> SET @j = ‘{"a": 1, "b": 2, "c": {"d": 4}}‘;
    mysql> SET @j2 = ‘1‘;
    mysql> SELECT JSON_CONTAINS(@j, @j2, ‘$.a‘);
    +-------------------------------+
    | JSON_CONTAINS(@j, @j2, ‘$.a‘) |
    +-------------------------------+
    |                             1 |
    +-------------------------------+
    mysql> SELECT JSON_CONTAINS(@j, @j2, ‘$.b‘);
    +-------------------------------+
    | JSON_CONTAINS(@j, @j2, ‘$.b‘) |
    +-------------------------------+
    |                             0 |
    +-------------------------------+
    
    mysql> SET @j2 = ‘{"d": 4}‘;
    mysql> SELECT JSON_CONTAINS(@j, @j2, ‘$.a‘);
    +-------------------------------+
    | JSON_CONTAINS(@j, @j2, ‘$.a‘) |
    +-------------------------------+
    |                             0 |
    +-------------------------------+
    mysql> SELECT JSON_CONTAINS(@j, @j2, ‘$.c‘);
    +-------------------------------+
    | JSON_CONTAINS(@j, @j2, ‘$.c‘) |
    +-------------------------------+
    |                             1 |
    +-------------------------------+
  • JSON_CONTAINS_PATH(json_docone_or_allpath[, path] ...)

    返回0或1以指示JSON文档是否包含给定路径中的数据。返回NULL 是否有任何参数NULL如果json_doc参数不是有效的JSON文档,任何path 参数不是有效的路径表达式,或者 one_or_all不是 ‘one‘或,都会发生错误‘all‘

    要检查路径上的特定值,请 JSON_CONTAINS()改用。

    如果文档中没有指定的路径,则返回值为0。否则,返回值取决于 one_or_all参数:

    • ‘one‘:如果文档中至少存在一个路径,则为1,否则为0。

    • ‘all‘:如果文档中所有路径都存在,则为1,否则为0。

    mysql> SET @j = ‘{"a": 1, "b": 2, "c": {"d": 4}}‘;
    mysql> SELECT JSON_CONTAINS_PATH(@j, ‘one‘, ‘$.a‘, ‘$.e‘);
    +---------------------------------------------+
    | JSON_CONTAINS_PATH(@j, ‘one‘, ‘$.a‘, ‘$.e‘) |
    +---------------------------------------------+
    |                                           1 |
    +---------------------------------------------+
    mysql> SELECT JSON_CONTAINS_PATH(@j, ‘all‘, ‘$.a‘, ‘$.e‘);
    +---------------------------------------------+
    | JSON_CONTAINS_PATH(@j, ‘all‘, ‘$.a‘, ‘$.e‘) |
    +---------------------------------------------+
    |                                           0 |
    +---------------------------------------------+
    mysql> SELECT JSON_CONTAINS_PATH(@j, ‘one‘, ‘$.c.d‘);
    +----------------------------------------+
    | JSON_CONTAINS_PATH(@j, ‘one‘, ‘$.c.d‘) |
    +----------------------------------------+
    |                                      1 |
    +----------------------------------------+
    mysql> SELECT JSON_CONTAINS_PATH(@j, ‘one‘, ‘$.a.d‘);
    +----------------------------------------+
    | JSON_CONTAINS_PATH(@j, ‘one‘, ‘$.a.d‘) |
    +----------------------------------------+
    |                                      0 |
    +----------------------------------------+
  • JSON_EXTRACT(json_docpath[, path] ...)

    从JSON文档返回数据,该数据是从与path 参数匹配的文档部分中选择的返回NULL是否有任何参数 NULL在文档中找到值的路径。如果json_doc参数不是有效的JSON文档或任何path参数不是有效的路径表达式,则会发生错误 

    返回值由path参数匹配的所有值组成 如果这些参数有可能返回多个值,则匹配的值将按照与产生它们的路径相对应的顺序自动包装为一个数组。否则,返回值是单个匹配值。

    mysql> SELECT JSON_EXTRACT(‘[10, 20, [30, 40]]‘, ‘$[1]‘);
    +--------------------------------------------+
    | JSON_EXTRACT(‘[10, 20, [30, 40]]‘, ‘$[1]‘) |
    +--------------------------------------------+
    | 20                                         |
    +--------------------------------------------+
    mysql> SELECT JSON_EXTRACT(‘[10, 20, [30, 40]]‘, ‘$[1]‘, ‘$[0]‘);
    +----------------------------------------------------+
    | JSON_EXTRACT(‘[10, 20, [30, 40]]‘, ‘$[1]‘, ‘$[0]‘) |
    +----------------------------------------------------+
    | [20, 10]                                           |
    +----------------------------------------------------+
    mysql> SELECT JSON_EXTRACT(‘[10, 20, [30, 40]]‘, ‘$[2][*]‘);
    +-----------------------------------------------+
    | JSON_EXTRACT(‘[10, 20, [30, 40]]‘, ‘$[2][*]‘) |
    +-----------------------
                            
                        

人气教程排行