Postgresql-13

如何查詢 JSONB 欄位類型

  • June 5, 2021

我有一個名為“隊列”的 jsonb 欄位,它包含以下內容:

{
 "call_queue_pid": [
   1,
   2,
   3
 ],
 "omni_queue_pid": [
   4,
   5,
   6
 ]
}

我嘗試以下查詢來搜尋omni_queue_pid = 5

Select * 
from ws a,
   jsonb_array_elements(a.queues::jsonb) j 
Where cast(j->> 'omni_queue_pid' as integer) = 5

但它返回SQL 錯誤$$ 22023 $$: 錯誤: 無法從對像中提取元素

我錯過了什麼?

需要幫忙

謝謝唐

您需要取消嵌套數組:

Select * 
from ws a
 cross join jsonb_array_elements_text(a.queues -> 'omni_queue_pid') as o(id)
Where o.id::int = 5

目前尚不清楚您到底想要什麼結果,但 EXISTS 條件可能更有效:

select * 
from ws a
where exists (select *
             from jsonb_array_elements_text(a.queues -> 'omni_queue_pid') as o(id)
             Where o.id::int = 5)

或使用 jsonpath 運算符:

select * 
from ws
where queues @? '$.omni_queue_pid[*] == 5'

引用自:https://dba.stackexchange.com/questions/293810