postgresql - 如何按对象数组的 jsonb 字段中的特定属性过滤记录

标签 postgresql

我有一个表,其中有一列名为“settings”,类型为 jsonb(可为空),模式如下:

[
  {
     att1: "test"
     "start": 2019-02-01 00:00:00
     "end": 2019-02-20 00:00:00
  },
  {
     att1: "test2"
     "start": 2019-03-01 00:00:00
     "end": 2019-03-15 00:00:00
  }
]

表格示例:

id,settings
1,"[{"end": "2019-02-01 00:00:00"},{"2019-02-05 00:00:00"}]"
2,"[{"end" : '2019-02-20 00:00:00'}]"

我想在特定时间戳以上的数组 jsonb 中找到所有具有“结束”字段的记录

例如,如果我查询“end”>“2019-02-19 00:00:00”,我希望得到记录 2。

请指教!

最佳答案

你可以试试这段代码:

SELECT *
FROM test_table tt
WHERE exists(
          SELECT *
          FROM jsonb_array_elements(tt.settings) AS settings
          WHERE (settings ->> 'start') > '2019-02-19 00:00:00'
        );

关于postgresql - 如何按对象数组的 jsonb 字段中的特定属性过滤记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54538040/

相关文章:

Postgresql 部分索引超出最大索引行大小

SQL计数关联频率

postgresql - 如何从 vagrant virtualbox 机器连接主机 PostgreSQL

python - 为什么 Psycopg 提供 `cursor` 的方法 (`copy_to()` , `copy_from()` ),而不是调用 `cursor.execute()` 发送 `COPY` 命令?

regex - 使用 postgres 正则表达式捕获一个点

sql - 如何在插入后创建触发器而不在 postgres 中返回 NEW?

hibernate - jpa hibernate @ElementCollection

postgresql - sslcert 和 sslkey 如何在 Kubernetes 中作为环境变量传递?

mysql - 检查两个 SQL 查询是否返回等效数据

database - 根据拆分字符选择postgres中文本字段的最后n行