[英]SQL for json array in column
我有一個 SQL 表,其中一列為jsonb
數據類型。 以下是 json 條目:
{
"size": -1,
"regions": [
{
"shape_attributes": {
"name": "polygon",
"X": [
2703,
2801,
2884
]
},
"region_attributes": {
"Material Type": "wood",
"Color": "red"
}
},
{
"shape_attributes": {
"name": "polygon",
"X": [
2397,
2504,
2767
]
},
"region_attributes": {
"Material Type": "metal",
"Color": "blue"
}
}
],
"filename": "filenam_1"
}
我正在使用 PostgreSQL。 給定一個 search_string,對於這兩種情況,我如何使用 SQL 到 select 行 -
我試過這個
select *
from TABLE_Name
WHERE ‘wood’ IN ( SELECT value FROM OPENJSON(COL_NAME,'$.Material Type'))
---
Error occurred during SQL query execution
Reason:
SQL Error [42883]: ERROR: function openjson(jsonb, unknown) does not exist
Hint: No function matches the given name and argument types. You might need to add explicit type casts.
SELECT *
FROM TABLE_Name
CROSS APPLY OPENJSON(COL_NAME,'$.Material Type')
WHERE value ='wood'
---
Error occurred during SQL query execution
Reason:
SQL Error [42601]: ERROR: syntax error at or near "APPLY"
我認為你正在做的事情根本不可能,除非我不知道。 您可以使用編程語言,例如 Python 或 C#,並在程序中執行 SQL 查詢。 這要容易得多。
要查找具有已知鍵的鍵/值對,您可以使用幾種不同的方法,使用contains 運算符就是其中之一:
select *
from table_name
where the_jsonb_column @> '{"regions": [{"region_attributes": {"Material Type": "wood"}}]}'
上面提到的openjson
function(來自 SQL 服務器)的等價物是jsonb_each()
但是(就像openjson
一樣)只會擴展頂級鍵/值對。 它不會遞歸地執行此操作。
如果您至少知道鍵位於regions
數組中的某處,則可以使用遍歷所有元素的 JSON/Path 表達式(遞歸):
select *
from table_name
where (t.the_jsonb_column -> 'regions') @@ '$[*].** == "wood"'
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.