sql - 仅选择 Postgres JSONB 字段中的非 NULL 键

标签 sql postgresql jsonb postgres-9.6

我有一个带有 JSONB 列的 postgres 9.6 表

> SELECT id, data FROM my_table ORDER BY id LIMIT 4;

 id |               data    
----+---------------------------------------
  1 | {"a": [1, 7], "b": null, "c": [8]}
  2 | {"a": [2, 9], "b": [1], "c": null}
  3 | {"a": [8, 9], "b": null, "c": [3, 4]}
  4 | {}

如您所见,某些 JSON 键具有 null 值。

我想排除这些 - 有没有一种简单的方法可以SELECT仅生成非null键值对:

 id |               data    
----+---------------------------------------
  1 | {"a": [1, 7], "c": [8]}
  2 | {"a": [2, 9], "b": [1]}
  3 | {"a": [8, 9], "c": [3, 4]}
  4 | {}

谢谢!

最佳答案

您可以使用jsonb_strip_nulls()

select id, jsonb_strip_nulls(data) as data
from my_table;

在线示例:http://rextester.com/GGJRW83576

请注意,此函数不会删除数组内的 null 值。

关于sql - 仅选择 Postgres JSONB 字段中的非 NULL 键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50839084/

相关文章:

php - 将数据从文件写入数据库并更新旧数据

MySQL group by 具有多列总和和每组的总和

excel - Postgres 小数精度 VS Excel

postgresql - 通过变量路径访问 JSONB 元素

arrays - PostgreSQL 中 json 数组值的交集

mysql - 你可以在mysql的WHERE子句中使用别名吗?

sql - 使用 T-SQL 将数据从 CSV 格式的文本变量插入表中

java - 每个线程一个数据库连接?

mysql - Postgresql 更新时的当前时间戳

postgresql - 如何从每个元素 json 数组 postgres 中删除字段?