【发布时间】:2020-06-05 13:38:53
【问题描述】:
例如,我有一个名为 user 的表,其中包含 jsonb 类型的登录列 记录看起来像这样:
user
name | login
-------------
test1 | {"byDate":[{"date":"2020-01-01"},{"date":"2020-01-02"},{"date":"2020-01-03"},]}
test2 | {"byDate":[{"date":"2020-01-02"},{"date":"2020-01-03"},{"date":"2020-01-04"},]}
我如何SELECT(带有WHERE 子句)同时包含日期'2020-01-01' 和'2020-01-02'?
对于一个约会,我可以做到:
SELECT *
FROM "user"
WHERE "login" @> '{"byDate":[{"date": "2020-01-01"}]}'
我可以使用某种IN 来同时选择'2020-01-01' 和'2020-01-02' 吗?还是我只使用 OR,例如:
SELECT *
FROM "user"
WHERE "login" @> '{"byDate":[{"date": "2020-01-01"}]}'
OR "login" @> '{"byDate":[{"date": "2020-01-02"}]}'
我希望结果是 OR 产品,例如:我使用 '2020-01-01' OR '2020-01-03' test1 和 test2 将出现在结果中。
任何帮助将不胜感激。
谢谢
【问题讨论】:
-
您能否澄清一下您是否需要一个仅返回两个日期都存在的行的条件,或者您是否需要一个至少的解决方案其中一个日期存在
-
@a_horse_with_no_name 澄清添加.. 我需要运行 WHERE OR,因此至少存在一个日期。
-
您的第二个查询将做到这一点。
-
@a_horse_with_no_name 抱歉,离开了几天,现在回到这个项目。我不喜欢我的第二个查询,如果我有几个月(甚至年)的日期..它将成为一长串查询..即使我将以编程方式构建查询,我不禁想知道是否有更短的方法来做到这一点..
标签: sql json postgresql jsonb