Postgres JSONB, как проверить некоторые значения не пусто - PullRequest
0 голосов
/ 10 октября 2018

У меня есть значение jsonb

{"mts": "375", "tele2": "", "beeline": "56", "megafon": "377"}

как можно проверить, например, что МТС и Мегафон не пусто

мой запрос

select * 
from test 
where settings->>'megafon' <> '' 
   or settings->>'mts' <> '' 
   or settings->>'beeline' <> ''

Но этотак длиннее запрос, как написать короткое условие?

1 Ответ

0 голосов
/ 10 октября 2018
SELECT * FROM
    jsonb_each_text('{"mts": "", "tele2": "", "beeline": "56", "megafon": "377"}'::jsonb)
WHERE value != ''

json_each_text() расширяет каждый элемент json как текстовый элемент в одну строку каждый.В результате получается таблица со столбцами key и value.

. Теперь вы можете фильтровать столбец value для каждого содержимого.

https://www.postgresql.org/docs/current/static/functions-json.html

...