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

相关推荐
数据智能老司机18 分钟前
CockroachDB权威指南——开始使用
数据库·分布式·架构
松果猿39 分钟前
空间数据库学习(二)—— PostgreSQL数据库的备份转储和导入恢复
数据库
无名之逆1 小时前
Rust 开发提效神器:lombok-macros 宏库
服务器·开发语言·前端·数据库·后端·python·rust
s9123601011 小时前
rust 同时处理多个异步任务
java·数据库·rust
数据智能老司机1 小时前
CockroachDB权威指南——CockroachDB 架构
数据库·分布式·架构
hzulwy1 小时前
Redis常用的数据结构及其使用场景
数据库·redis
程序猿熊跃晖1 小时前
解决 MyBatis-Plus 中 `update.setProcInsId(null)` 不生效的问题
数据库·tomcat·mybatis
Three~stone3 小时前
MySQL学习集--DDL
数据库·sql·学习
Qi妙代码3 小时前
MYSQL基础
数据库·mysql·oracle
Arbori_262153 小时前
Oracle中的UNION原理
数据库·oracle