VastbaseG100

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

Menu

JSONB_STRIP_NULLS

功能描述

Vastbase在PostgreSQL兼容模式下支持JSONB_STRIP_NULLS函数,用于删除对象中的值为NULL的字段,非对象字段的NULL值不处理。

  • 当待处理的jsonb值为NULL时,函数将返回NULL。

  • jsonb传入为标量值则直接返回jsonb文本。

注意事项

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

  • 函数传入参数不可为空,否则本函数将报错。

语法格式

JSONB_STRIP_NULLS(jsonb)

参数说明

jsonb

要处理的JSONB文本。

示例

示例1:直接调用JSON_SSTRIP_NULL和JSONB_STRIP_NULLS函数。

select json_strip_nulls('[{"f1":1, "f2":null}, 2, null, 3]') ;
select jsonb_strip_nulls('[{"f1":1, "f2":null}, 2, null, 3]') ;

返回结果为如下:

  json_strip_nulls
---------------------
 [{"f1":1},2,null,3]
(1 row)

    jsonb_strip_nulls
-------------------------
 [{"f1": 1}, 2, null, 3]
(1 row)

示例2: 插入表数据时使用JSONB_STRIP_NULLS函数。

1、创建测试表。

create table tt_1162158(id int unique,a1 json,a2 json not null,a3 json default json_strip_nulls('[{"name":null},{"number":[null,1,2]},{"name":"wzr"},null,0,[1,2,3]]'),a4 json,a5 json check (a5 is not null));
create table tab_1162158(id int unique,a1 jsonb primary key,a2 jsonb not null,a3 jsonb default jsonb_strip_nulls('[{"name":null},{"number":[null,1,2]},{"name":"wzr"},null,0,[1,2,3]]'),a4 jsonb unique,a5 jsonb check (a5 is not null));

2、向测试表中插入数据,并查询测试表数据。

insert into tab_1162158 values(1,'[{"wzr":null}]','"a"',default,'1','1');
insert into tab_1162158 values(2,jsonb_strip_nulls('[{"insert":[null,1,2]}]'),'"b"','"b"','2','2');
insert into tab_1162158 values(3,'3','"c"','"c"','[{},3]','3');
insert into tt_1162158 values(1,'[{"wzr":null}]','"a"',default,'1','1');
insert into tt_1162158 values(2,json_strip_nulls('[{"insert":[null,1,2]}]'),'"b"','"b"','2','2');
insert into tt_1162158 values(3,'3','"c"','"c"','[{},3]','3');

select * from tab_1162158 order by id;
select * from tt_1162158 order by id;

返回结果为如下:

 id |             a1             | a2  |                                 a3                                  |   a4    | a5
----+----------------------------+-----+---------------------------------------------------------------------+---------+----
  1 | [{"wzr": null}]            | "a" | [{}, {"number": [null, 1, 2]}, {"name": "wzr"}, null, 0, [1, 2, 3]] | 1       | 1
  2 | [{"insert": [null, 1, 2]}] | "b" | "b"                                                                 | 2       | 2
  3 | 3                          | "c" | "c"                                                                 | [{}, 3] | 3
(3 rows)

 id |           a1            | a2  |                            a3                            |   a4   | a5
----+-------------------------+-----+----------------------------------------------------------+--------+----
  1 | [{"wzr":null}]          | "a" | [{},{"number":[null,1,2]},{"name":"wzr"},null,0,[1,2,3]] | 1      | 1
  2 | [{"insert":[null,1,2]}] | "b" | "b"                                                      | 2      | 2
  3 | 3                       | "c" | "c"                                                      | [{},3] | 3
(3 rows)

3、进行merge into操作。

merge into tab_1162158 p
using tt_1162158 np
on(p.id=np.id)
when matched then
update set p.a2=jsonb_strip_nulls('[{"hi":null},{"operate":"merge into"}]')
when not matched then
insert values (np.id,np.a1::jsonb,np.a2::jsonb,np.a3::jsonb,np.a4::jsonb,np.a5::jsonb);
merge into tt_1162158 p
using tab_1162158 np
on(p.id=np.id)
when matched then
update set p.a2=json_strip_nulls('[{"hi":null},{"operate":"merge into"}]')
when not matched then
insert values (np.id,np.a1::json,np.a2::json,np.a3::json,np.a4::json,np.a5::json);

select * from tab_1162158 order by id;
select * from tt_1162158 order by id;

返回结果为如下:

 id |             a1             |               a2                |                                 a3                                  |   a4    | a5
----+----------------------------+---------------------------------+---------------------------------------------------------------------+---------+----
  1 | [{"wzr": null}]            | [{}, {"operate": "merge into"}] | [{}, {"number": [null, 1, 2]}, {"name": "wzr"}, null, 0, [1, 2, 3]] | 1       | 1
  2 | [{"insert": [null, 1, 2]}] | [{}, {"operate": "merge into"}] | "b"                                                                 | 2       | 2
  3 | 3                          | [{}, {"operate": "merge into"}] | "c"                                                                 | [{}, 3] | 3
(3 rows)

 id |           a1            |              a2               |                            a3                            |   a4   | a5
----+-------------------------+-------------------------------+----------------------------------------------------------+--------+----
  1 | [{"wzr":null}]          | [{},{"operate":"merge into"}] | [{},{"number":[null,1,2]},{"name":"wzr"},null,0,[1,2,3]] | 1      | 1
  2 | [{"insert":[null,1,2]}] | [{},{"operate":"merge into"}] | "b"                                                      | 2      | 2
  3 | 3                       | [{},{"operate":"merge into"}] | "c"                                                      | [{},3] | 3
(3 rows)