【问题标题】:Querying Postgres SQL JSON Column查询 Postgres SQL JSON 列
【发布时间】:2020-04-01 17:12:13
【问题描述】:

我在 postgres 数据库中有一个 json 列 (json_col),其结构如下:

{
   "event1":{
      "START_DATE":"6/18/2011",
      "END_DATE":"7/23/2011",
      "event_type":"active with prior experience"
   },
   "event2":{
      "START_DATE":"8/20/11",
      "END_DATE":"2/11/2012",
      "event_type":"active"
   }
}

[表结构示例][1]

如何在 postgres 中使用 select 语句返回 start_date 和 end_date 以及 where 语句,其中 "event_type" 像 "active"?

尝试查询:

select person_id, json_col#>>'START_DATE' as event_start, json_col#>>'END_DATE' as event_end
from data
where json_col->>'event_type' like '%active%'; 

返回空列。

预期响应:

event_start  
6/18/2011
8/20/2011

【问题讨论】:

  • 您的查询和错误信息不匹配。
  • 感谢您指出这一点。当我更正查询中的 where 语句时(请参阅已编辑的问题),它现在返回空列。
  • #>> 运算符需要一个数组作为右手参数,例如json_col #>> '{event1,START_DATE}'
  • 你想要的输出到底是什么?两个“事件”都有资格成为active。您要检索哪个开始日期和结束日期?您能否请edit您的问题并添加预期的输出?
  • 目标是我想在这两个事件中查询 event_type 并有一个指示两个事件的 start_date 的响应。这可能吗?

标签: postgresql jsonb


【解决方案1】:

听起来您想取消嵌套 json 结构,忽略顶级键并只获取顶级值。您可以使用 jsonb_each 执行此操作,查看名为“值”的结果列。您可以将函数调用作为横向连接放在 FROM 列表中(但由于它是函数调用,您不需要指定 LATERAL 关键字,它是隐式的)

select value->>'START_DATE' from data, jsonb_each(json_col) 
    where value->>'event_type' like '%active%';

【讨论】:

  • 这就是我要找的!谢谢!
猜你喜欢
  • 2023-03-16
  • 2020-08-13
  • 2015-08-11
  • 2014-09-23
  • 2018-04-13
  • 1970-01-01
  • 2015-07-17
  • 2017-06-01
相关资源
最近更新 更多