如何使用 sql/knexjs 查询迭代 json 数据
How to iterate on json data with sql/knexjs query
我正在使用 postgresql db.I 有一个名为 'offers' 的 table,其中有一列 '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"}]
现在我想获取 'validity' 列包含的所有记录:
program_id = 4 和 end_date > current_date.
如何写SQL查询或knexjs查询来实现?
提前致谢
您可以使用 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)
我正在使用 postgresql db.I 有一个名为 'offers' 的 table,其中有一列 '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"}]
现在我想获取 'validity' 列包含的所有记录: program_id = 4 和 end_date > current_date.
如何写SQL查询或knexjs查询来实现? 提前致谢
您可以使用 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)