我json_insert在 SQLite 檔案的 json 部分找到了一個方法。但它似乎沒有按我預期的方式作業。
例如select json_insert('[3,2,1]', '$[3]', 4) as result;
列result回傳'[3,2,1,4]',這是正確的。
但對于select json_insert('[3,2,1]', '$[1]', 4) as result;
我期待類似'[3,2,4,1]'的東西被退回,而不是'[3,2,1]'.
我錯過了什么嗎?我沒有看到有替代方法json_insert。
PS 我在https://sqlime.org/#demo.db上玩,SQLite 版本是3.37.2.
uj5u.com熱心網友回復:
檔案宣告json_insert() 不會覆寫值(“如果已經存在則覆寫? - 否”)。這意味著您不能在陣列中間插入元素。
我的解釋:該函式主要用于將鍵插入物件,這種行為更有意義——不改變陣列的長度是為了一致性而犧牲。
您可以通過將 JSON 陣列轉換為表、附加元素、對結果進行排序并將其全部轉換回 JSON 陣列來將其硬塞到 SQLite 中:
select json_group_array(x.value) from (
select key, value from json_each('[3,2,1]')
union
select 1.5, 4 -- 1.5 = after 1, before 2
order by 1
) x
這將產生'[3,2,4,1]'.
但是您可能會看到這不會擴展,即使有一個內置函式可以為您執行此操作,它也不會擴展。字串操作很慢。對于一次性或不經常使用它可能足夠好。
從長遠來看,我建議正確規范您的資料庫結構,而不是將“非 blob”資料存盤在 JSON blob 中。操作規范化資料比操作 JSON 容易得多,更不用說速度可能快幾個數量級了。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/446888.html
下一篇:SQL從調查中查找課程受歡迎程度
