簡體   English   中英

Postgres - 在 json 元素數組中搜索

[英]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']

以上將返回包含montue所有行

一種方法是使用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM