我有一个jsonb值

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

例如,如何检查mts和megafon是否为空
我的问题是
select *
from test
where settings->>'megafon' <> ''
   or settings->>'mts' <> ''
   or settings->>'beeline' <> ''

但它是如此的长查询,如何写短条件?

最佳答案

SELECT * FROM
    jsonb_each_text('{"mts": "", "tele2": "", "beeline": "56", "megafon": "377"}'::jsonb)
WHERE value != ''

json_each_text()将每个json元素作为文本元素展开为一行。结果是一个包含keyvalue列的表。
现在您可以为每个内容筛选value列。
https://www.postgresql.org/docs/current/static/functions-json.html

10-07 19:34