我json的 PostgreSQL 表中有一個類似于此的列:
{"example--4--":"test 1","another example--6--":"test 2","final example--e35b172a-af71-4207-91be-d1dc357fe8f3--Equipment":"ticked"}
{"example--4--":"test 4","another example--6--":"test 5","final example--e35b172a-af71-4207-91be-d1dc357fe8f3--Equipment":"ticked"}
每個鍵包含一個由 分隔的映射--。前綴是唯一的,即:“example”、“another example”和“final example”。
我需要查詢唯一前綴,到目前為止,我正在嘗試的任何東西都沒有。
select some_table.json_column from some_table
left join lateral (select array(select * from json_object_keys(some_table.json_column) as keys) k on true
where (select SPLIT_PART(k::text, '--', 1) as part_name) = 'example'
and some_table.json_column->>k = 'test 1'
以上導致以下錯誤(最后一行):
運算子不存在:json -> 記錄
我的預期輸出將"example--4--":"test 1"是存在的任何記錄(在我上面的示例中,唯一的結果是)
{"example--4--":"test 1","another example--6--":"test 2","final example--e35b172a-af71-4207-91be-d1dc357fe8f3--Equipment":"ticked"}
任何幫助表示贊賞。在除錯了一段時間后,我可以看到主要問題在隱式轉換為::text. k似乎是我需要回圈和拆分以比較的鍵的“記錄”,目前,我正在將記錄轉換為導致問題的文本。
uj5u.com熱心網友回復:
一種方法是將 EXIST 條件與jsonb_each_text()
select *
from the_table
where exists (select *
from jsonb_each_text(data) as x(key,value)
where x.key like 'example%'
and x.value = 'test 1')
如果您的列不是jsonb(應該是),則需要json_each_text()改用
另一種選擇是使用 JSON 路徑運算式:
select *
from the_table
where data @? '$.keyvalue() ? (@.key like_regex "^example" && @.value == "test 1")'
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/477186.html
標籤:json PostgreSQL
上一篇:一旦我通過RestSharp發布它,我的json鍵就會被轉換為小寫
下一篇:在回圈中將變數添加到bash陣列
