[英]Postgres - search in json array of elements
我的表:
身份证 | 姓名 | 开放天数
列 open_days 是一个具有以下结构的 json 列:
{
daysOfWeek: ['mon','tue','sat']
months: ['may','november']
}
我想找到 daysOfWeek 包含搜索元素的行。 就像是
SELECT * FROM places WHERE :day=ANY(open_days->'daysOfWeek')
但是上面的查询是不正确的。 请帮助如何搜索json数组。
谢谢你。
假设open_days
是一个jsonb
列(它应该是),那么您可以使用 contains 运算符?
:
select *
from places
where open_days -> 'daysOfWeek' ? :day
如果是json
列,则需要将其open_days::jsonb -> ...
如果要搜索包含多个工作日的值,可以使用?&
运算符:
select *
from places
where open_days -> 'daysOfWeek' ?& array['mon','tue']
以上将返回包含mon
和tue
所有行
一种方法是使用json_array_elements()
。
SELECT *
FROM places
WHERE :day = ANY (SELECT json_array_elements(open_days->'daysOfWeek')#>>'{}');
另一种方法是使用容器操作员。
select * from places where open_days @> '{"daysOfWeek":["mon"]}'
使用-> ... ?
的优势-> ... ?
一个是容器可以使用默认的 JSONB 索引,而另一个则需要专门的索引。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.