You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQLite如何删除多列中均不包含指定字符串的所有行

SQLite 删除多列均不包含指定字符串的行的高效实现

核心逻辑:需要删除的是所有待检查列都不包含目标字符串的行,只要任意一列包含目标字符串,该行就保留。

性能最优的通用写法

直接逐列做模糊匹配,用AND连接所有列的判断条件,这是SQLite中执行开销最低的写法,不需要额外函数计算、字符串拼接,数据库引擎可以直接逐行判断:

-- 替换为实际的表名、列名即可
DELETE FROM 你的表名
WHERE 
  列1 NOT LIKE '%Steel%'
  AND 列2 NOT LIKE '%Steel%'
  AND 列3 NOT LIKE '%Steel%';

注意:这里必须用AND连接条件,不要用OR。只有当所有列都不包含'Steel'时,行才会被删除;如果误用OR,会导致只要某一列不包含'Steel'就删行,出现大面积误删。

列数较多时的简化写法

如果需要检查的列非常多,手动枚举所有列名效率低,可以通过SQLite内置的pragma_table_info查询表结构,自动生成删除语句:

-- 替换语句里的表名、目标字符串,执行后会直接输出拼接完成的DELETE语句
SELECT 
  'DELETE FROM 你的表名 WHERE ' 
  || GROUP_CONCAT(name || ' NOT LIKE ''%Steel%''', ' AND ') 
  || ';'
FROM pragma_table_info('你的表名');

复制查询输出的SQL语句,确认逻辑无误后执行即可。

注意事项

  • 默认情况下SQLite的LIKE对ASCII范围内的英文字符大小写不敏感,如果需要严格区分大小写,可以将LIKE替换为GLOB,或者执行PRAGMA case_sensitive_like = ON;开启大小写敏感匹配。
  • 如果目标字符串本身包含%、_这类LIKE通配符,需要增加转义符处理,例如匹配字符串Steel_1时,写法为NOT LIKE '%Steel\_1%' ESCAPE '\'。

示例表截图


内容的提问来源于stack exchange,提问作者Jordy Steyaert

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 07:45:29