首页 > 解决方案 > Postgres jsonb如何检查一些值不为空

问题描述

我有一个 jsonb 值

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

例如,如何检查 mts 和 megafon 是否为空

我的查询是

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

但是这么长的查询,短的条件怎么写呢?

标签: sqlpostgresqljsonb

解决方案


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


推荐阅读