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)