【发布时间】:2016-03-27 17:24:38
【问题描述】:
我想获取所有记录,其中 jsonb 字段中的任何 value 包含文本,无论键如何。
例如:字段包含 json {k1: 'hello', k2: 'world'}。我想通过文本“你好”来获得这条记录。我不关心键或任何 json 结构,只关心值。
一个肮脏的技巧是将字段转换为 varchar where jsonb_field::varchar like ...,但这很丑陋,它也会匹配键和 {}。
另一个肮脏的黑客看起来像这样:
SELECT * FROM mytable AS m1 WHERE (
SELECT string_agg(value, '') FROM jsonb_each_text( (SELECT name FROM mytable AS m2 WHERE m1.id= m2.id)::jsonb )
) LIKE '%whatever%';
但它也很丑。
我该怎么做?
【问题讨论】:
标签: postgresql postgresql-9.4 jsonb