jsonb find to array

структура json

[{"to": 5, "from": 1, "country": 1}, {"to": 11, "from": 6, "country": 2}, {"to": 20, "from": 12, "country": 3}]

SELECT column_json::jsonb FROM table WHERE column_json::jsonb ....;

подскажите, что написать в WHERE если мне надо вытащить country='1' и '3' BETWEEN column_json.from AND column_json.to


Ответы (1 шт):

Автор решения: Akina
SELECT test.id, parsed.element
FROM test
CROSS JOIN jsonb_array_elements(data) AS parsed (element)
WHERE jsonb_extract_path(parsed.element, 'country')::INT = 1
AND 3 BETWEEN jsonb_extract_path(parsed.element, 'from')::INT 
          AND jsonb_extract_path(parsed.element, 'to')::INT

https://dbfiddle.uk/?rdbms=postgres_12&fiddle=5c374bb942641b5db68a32267e3739a3

Если поле имеет тип, отличный от JSONB - используйте JSON-версии функций или явно приводите тип.

→ Ссылка