问题
I have a JSONB that looks something like this
[{
"foo":"bar",
"date":"2020-01-01"
},
{
"foo":"bar",
"date":"2020-02-03"
},
{
"foo":"bar",
"date":"2020-01-02"
}]
I need a query to return true if ALL of the "date"s are less than 1 year ago. I have looked at the postgres JBON documentation and the only thing sort of fitting I found was using ?& but I'm not just trying to compare strings but dates that are strings so I am kind of lost here
回答1:
You will need to iterate over all elements and then convert the strings to dates in order to be able to compare them.
select .... other columns ....,
current_date - interval '1 year' < all (select (x.entry ->> 'date')::date
from jsonb_array_elements(t.data) as x(entry))
from the_table t
来源:https://stackoverflow.com/questions/60543870/postgres-jsonb-date-condition-true-for-all-entries-of-an-array