VastbaseG100

基于openGauss内核开发的企业级关系型数据库。

Menu

JSONB_PATH_EXISTS

功能描述

JSONB_PATH_EXISTS函数用于对JSONB类型的数据进行检查,检查给定的JSON路径中是否存在指定的JSON值。该函数的返回值是Boolean类型的值,如存在则返回‘t’,如不存在则返回‘f’。

注意事项

  • 该功能仅在数据库兼容模式为PostgreSQL时支持(即数据库初始化时指定DBCOMPATIBILITY='PG')。

  • 如果任意一个入参为NULL,则该函数将返回NULL。

语法格式

jsonb_path_exists ( target jsonb, path jsonpath [, vars jsonb [, silent boolean ]] ) → boolean

参数说明

  • target

    必需的。待检查的指定JSONB值。

  • path

    必需的。被检查的目标JSON路径。

  • vars

    可选的。JSON路径中要用到的变量值。

    如果指定了vars参数,则它必须是一个JSON对象。它提供了一个包含命名的变量的对象,要替换到jsonpath表达式中。

  • silent

    可选的。报错标识,Boolean类型。

    如果指定了silent参数并且值为true,那么函数将抑制与@?@@操作符相同的错误。

    @?@@操作符会抑制以下错误:缺乏对象字段或数组元素、意外的JSON项类型和数字错误。在搜索不同结构的JSON文档集合时,这种抑制功能可能会有帮助。

示例

示例1: 执行JSONB值检查,仅指定target和path。

SELECT jsonb_path_exists('[1, 2, 3]', '$[*] ? (@ > 1)');

返回结果如下:

 jsonb_path_exists
-------------------
 t
(1 row)

示例2: 执行JSONB值检查,指定可选参数vars和silent。

  • JSON路径中存在target值:

    select jsonb_path_exists('{"a":[1,2,3,4,5]}', '$.a[3] ? (@ >= $min && @ <= $max)','{"min":2,"max":4}');
    

    返回结果如下:

    jsonb_path_exists
    -------------------
    t
    (1 row)
    
  • JSON路径中不存在target值:

    select JSONB_PATH_EXISTS('{"a":[1,2,3,4,5]}', '$.a[3] ? (@ > $min && @ < $max)', '{"min":2, "max":4}',true);
    

    返回结果如下:

    jsonb_path_exists
    -------------------
    f
    (1 row)
    

示例3: 执行JSONB值检查,指定其中target或path参数为NULL。

  • target为空:

    select jsonb_path_exists(null, '$.a[*] ? (@ >= $min && @ <= $max)', '{"min":2, "max":4}',true);
    

    返回结果如下:

    jsonb_path_exists
    -------------------
    
    (1 row)
    
  • path为空:

    select jsonb_path_exists('{"a":[1,2,3,4,5]}',null,'{}',true);
    

    返回结果如下:

    jsonb_path_exists
    -------------------
    
    (1 row)
    

示例4: jsonb_path_exists函数与表结合使用。

1、创建包含jsonb类型字段的测试表并插入数据。

create table tab_1157240(a1 jsonb,id int,a2 text,a3 date);
insert into tab_1157240 values('{"a":[1,2,3,4,5]}',1,'{"a":[1,2,3,4,5]}','2023-12-13');
insert into tab_1157240 values('{"a":[1,2,3]}',1,'{"a":[1,2,3,4]}','2023-09-23');

2、调用jsonb_path_exists函数,指定待检查的目标数据来自测试表的字段a1。

select jsonb_path_exists(a1, '$.a[3]', '{"min":2,"max":4}',true) from tab_1157240;

返回结果如下:

 jsonb_path_exists
-------------------
 t
 f
(2 rows)