如何从SQLite表的array类型列中批量移除指定字符串元素
SQLite 删除JSON数组中的指定元素
要批量删除SQLite表events中domain列(JSON格式字符串数组)里的所有"google"元素,推荐使用SQLite原生JSON函数解析并重组数组,避免字符串替换的局限性,具体方案如下:
正确的更新语句
UPDATE events SET domain = ( SELECT json_group_array(value) FROM json_each(events.domain) WHERE value != 'google' ) WHERE domain LIKE '%"google"%';
语句说明
json_each(events.domain):将每行的JSON数组拆分为单个元素的行集,逐个访问数组内的每个值WHERE value != 'google':过滤掉所有等于"google"的元素json_group_array(value):把过滤后的元素重新组合成新的JSON数组- 外层
WHERE domain LIKE '%"google"%':仅更新包含"google"的行,减少无意义的计算开销
为什么之前的方法不可靠
json_remove:该函数必须指定元素的索引位置,无法直接通过元素值匹配删除,直接传入"google"会触发语法错误REPLACE字符串替换:依赖数组的字符串格式(比如元素后的逗号),当"google"位于数组末尾时因无后续逗号会失效,还可能误删包含"google"子串的其他元素(如"google.com"),稳定性差
边界情况处理
- 若数组原本仅包含
["google"],执行后会变为[]空数组 - 若数组内存在多个"google"元素,所有匹配项都会被删除
内容的提问来源于stack exchange,提问作者charnould
相关产品推荐
相关产品推荐

