【问题标题】:How to iterate on json data with sql/knexjs query如何使用 sql/knexjs 查询迭代 json 数据
【发布时间】:2020-03-26 07:51:27
【问题描述】:

我正在使用 postgresql db。我有一个名为“offers”的表,其中有一列“validity”,其中包含以下 JSON 格式的数据:

[{"end_date": "2019-12-31", "program_id": "4", "start_date": "2019-10-27"}, 
{"end_date":"2020-12-31", "program_id": "6", "start_date": "2020-01-01"}, 
{"end_date": "2020-01-01", "program_id": "3", "start_date": "2019-10-12"}]

现在我想获取“有效性”列包含的所有记录: program_id = 4 和 end_date > current_date。

如何编写 SQL 查询或 knexjs 查询来实现这一点? 提前致谢

【问题讨论】:

  • 您希望该 JSON 数组中的所有数组元素作为单独的行吗?或者只是表 offers 中至少有一个数组元素符合您的条件的行?
  • @a_horse_with_no_name 仅表中的行提供了至少一个数组元素匹配的行

标签: sql json postgresql knex.js


【解决方案1】:

您可以使用 EXISTS 条件:

select o.*
from offers o
where exists (select *
              from jsonb_array_elements(o.validity) as v(item)
              where v.item ->> 'program_id' = '3'
                and (v.item ->> 'end_date')::date > current_date)

Online example

【讨论】:

  • 谢谢,但它给了我一些错误,例如“无法从标量中提取元素”和“输入末尾的语法错误”。您能看看吗?
  • @ShaheryarAhmed:那么您的列中没有有效的 JSON 值。
  • 嗯,没错。你能推荐一些我可以阅读更多关于用 sql 迭代 json 的东西吗?
猜你喜欢
  • 2017-11-09
  • 2023-03-23
  • 2023-02-02
  • 1970-01-01
  • 2017-08-28
  • 2012-08-27
  • 2021-10-19
  • 1970-01-01
  • 2015-08-22
相关资源
最近更新 更多