Postgresql 删除数组中的元素

extra为 {"a": [null, 3, null],"b": 111} 使用sql 将extra中a中的null移除

第一步:

首先先把[null, 3, null]移除,

sql 复制代码
select json_agg(elem) filter ( where elem != 'null' )
from (select jsonb_array_elements('[null,3,null]'::jsonb) as elem) t;

这将得到[3]

  1. jsonb_array_elements 会展开 extra 中 a 数组的每个元素。
  2. filter ( where elem != 'null' ) 用于过滤掉 null。
  3. 使用 jsonb_agg 将非 null 的值重新聚合为一个数组。

第二步:

使用jsonb_set更新数据

sql 复制代码
update table_name
SET extra = jsonb_set(extra::jsonb, '{a}', (select json_agg(elem)
                                            from jsonb_array_elements((extra -> 'a')::jsonb) as elem
                                            where elem != 'null')::jsonb)
where extra::jsonb ? 'a';

更多json用法:

http://www.postgres.cn/docs/12/functions-json.html

相关推荐
Java 码农3 分钟前
MySQL索引添加与删除方法详解
数据库·mysql
正在走向自律9 分钟前
电科金仓KingbaseES数据库全面语法解析与应用实践
数据库·国产数据库·kingbasees·数据定义语言ddl·数据操作语言dml·kingbasees语法
web安全工具库18 分钟前
Linux进程的:深入理解子进程回收与僵尸进程
java·linux·数据库
麦聪聊数据26 分钟前
大数据与云原生数据库中的 SQL2API:优化跨平台数据访问与查询
数据库·sql·云原生
虚伪的空想家36 分钟前
记录次etcd故障,fatal error: bus error
服务器·数据库·k8s·etcd
笨手笨脚の1 小时前
Mysql 的锁机制
数据库·mysql··死锁·间隙锁
老友@1 小时前
一次由 PageHelper 分页污染引发的 Bug 排查实录
java·数据库·bug·mybatis·pagehelper·分页污染
hzk的学习笔记1 小时前
Redisson解锁失败,watchdog会不会一直续期下去?
数据库·redis·缓存
合作小小程序员小小店1 小时前
web网页开发,在线%商城,电商,商品购买%系统demo,基于vscode,apache,html,css,jquery,php,mysql数据库
开发语言·前端·数据库·mysql·html·php·电商
TDengine (老段)2 小时前
TDengine 字符串函数 CONCAT 用户手册
java·数据库·tdengine