[英]How to insert an element into the middle of an array (json) in SQLite?
我在SQLite文档的json部分找到了一个方法json_insert
。 但它似乎没有按照我预期的方式工作。
例如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
。
文档指出json_insert()
不会覆盖值( “如果已经存在则覆盖? - 否” )。 这意味着您不能在数组中间插入元素。
我的解释:function 主要是为了将键插入 object,这种行为更有意义——不改变数组的长度是为了一致性而牺牲的。
您可以通过将 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]'
。
但是您可能会看到这不会扩展,即使有内置的 function 为您执行此操作,它也不会扩展。 字符串操作很慢。 对于一次性的或不经常使用的情况,它可能效果很好。
从长远来看,我会建议正确规范您的数据库结构,而不是将“非 blob”数据存储在 JSON blob 中。 处理规范化数据比处理 JSON 容易得多,更不用说快几个数量级了。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.