簡體   English   中英

PostgreSQL 對jsonb列數據的like查詢

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM