[英]PostgreSQL Like query for jsonb column data
這里的details_js列是 jsonb 類型,我想檢查 json 是否包含某些字符串。 我在下面的查詢中做錯了什么?
select *
from emp_details
where details_js->'$.*' like '%somestring%'
details_js->'$.*'
不起作用,它會逐字檢查是否有帶有'$.*'
的鍵
您需要取消嵌套 JSON 值中的所有元素才能執行此操作,例如使用 EXISTS 條件:
select d.*
from emp_details d
where exists (select *
from jsonb_each_text(d.details_js) as x(ky,value)
where value like '%somestring%');
如果您使用的是 Postgres 12,則可以使用 JSON 路徑表達式:
select *
from emp_details
where details_js @? '$.* ? (@ like_regex ".*somestring.*" flag "i")'
您應該使用運算符->>
。 該運算符確保結果為文本格式。
postgres=# select (jsonb '{"a":"AHOJ","b":"NAZDAR"}')->'b' like '%NAZ%';
ERROR: operator does not exist: jsonb ~~ unknown
LINE 1: select (jsonb '{"a":"AHOJ","b":"NAZDAR"}')->'b' like '%NAZ%'...
^
HINT: No operator matches the given name and argument types. You might need to add explicit type casts.
postgres=# select (jsonb '{"a":"AHOJ","b":"NAZDAR"}')->>'b' like '%NAZ%';
┌──────────┐
│ ?column? │
╞══════════╡
│ t │
└──────────┘
(1 row)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.