sql - 如何使用 sql/knexjs 查询迭代 json 数据
问题描述
我正在使用 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 查询来实现这一点?提前致谢
解决方案
您可以使用 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)
推荐阅读
- javascript - 不同的聊天外观/寻找双方
- jsf - 输入文本更改时 JSF inputText 不会自动触发更改事件
- angular - ngStyle = "{'background-image': 'url(' + imageSource + ')'}" 不起作用
- python - commands.bot 不可调用
- arrays - 如何将 2 个数组加入第三个数组?
- serenity-bdd - 与宁静聚合“net.thucydides.core.reports.TestOutcomes.getFailingOrErrorTests()Lnet/thucydides/core/reports/TestOutcomes”相关的问题
- mysql - 如何修复不一致的mysql结果?
- node.js - post方法中未调用回调函数
- c++ - 简单内存复制(rep movs)可能的错误?
- javascript - 使用请求拦截器时,Axios响应拦截器不起作用ReactJS