我想從 Sqlite 的 json 列中洗掉一個物件,但我無法使其作業。json 列包含一個嵌套物件,具有以下型別:
{
a: number;
pair: {
field1: string;
field2: string;
}[]
}
我想用相同的值更新列“ArrayColumn”,但洗掉field1等于"0"和field2等于的物件"1"。每行都包含該"pair"陣列,但并非 ArrayColumn 中的所有“對”陣列都包含此值({"field1":"0", "field2":"1"})
我有以下結構:
Id| ArrayColumn
--------------------------------------------------------------------------------------------
1 | { "a":1, "pair":[{"field1":"0", "field2":"1"},{"field1":"C", "field2":"D"},{"field1":"E", "field2":"F"}] }
2 | { "a":5, "pair":[{"field1":"C", "field2":"D"},{"field1":"E", "field2":"F"}] }
3 | { "a":8, "pair":[{"field1":"G", "field2":"G"},{"field1":"0", "field2":"1"},{"field1":"A", "field2":"A"}] }
4 | { "a":1, "pair":[{"field1":"F", "field2":"T"},{"field1":"C", "field2":"D"},{"field1":"0", "field2":"1"}] }
5 | { "a":1, "pair":[{"field1":"A", "field2":"B"}] }
更新行后,值將是:
Id| ArrayColumn
--------------------------------------------------------------------------------------------
1 | { "a":1, "pair":[{"field1":"C", "field2":"D"},{"field1":"E", "field2":"F"}] }
2 | { "a":5, "pair":[{"field1":"C", "field2":"D"},{"field1":"E", "field2":"F"}] }
3 | { "a":8, "pair":[{"field1":"G", "field2":"G"},{"field1":"A", "field2":"A"}] }
4 | { "a":1, "pair":[{"field1":"F", "field2":"T"},{"field1":"C", "field2":"D"}] }
5 | { "a":1, "pair":[{"field1":"A", "field2":"B"}] }
我嘗試使用 JSON_TREE 但無法使其作業。
我在想第一步是選擇包含該值的所有行,我使用以下兩種方式檢索它們:
- 使用 LIKE 運算子搜索字串化形式:
select Id, json_extract(json(par), '$.pair') as pair from Table pair like '%{"field1":"0","field2":"1"}%'
- 使用 json_tree
select Id, value from Table, json_tree(Table.ArrayColumn, '$.pair' ) where json_extract(value, '$.field1' ) = '0' AND json_extract(value, '$.field2' ) = '1'
我嘗試在這個小例子中使用 json_remove 但沒有運氣:
SELECT json_remove('[{"field1":"1","field2":"0"},{"field1":"A","field2":"B"}]', '${"field1":"1","field2":"0"}' )
我嘗試使用 json_remove 但沒有運氣。謝謝
uj5u.com熱心網友回復:
對于此示例資料,最簡單的方法是將 json 列視為字串并使用字串函式洗掉您想要的值:
UPDATE tablename
SET ArrayColumn = REPLACE(REPLACE(REPLACE(ArrayColumn, ']', ',]'), '{"field1":"0", "field2":"1"},', ''), ',]', ']')
WHERE ArrayColumn LIKE '%{"field1":"0", "field2":"1"}%';
請參閱演示。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/511648.html
下一篇:如何計算兩個時間戳之間的差異?
