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

如何使用sqlite3删除数据库中指定关键词及其后方的所有内容

你现有写法存在两个核心错误:

  • 匹配规则错误:like '%bantlon'仅能匹配以bantlon结尾的字段内容,无法覆盖关键词出现在字段任意位置的场景,不符合「包含关键词就排除」的要求
  • 功能缺失:仅做了整行删除,没有实现「删除关键词及后方所有内容」的字段裁剪需求

正确实现方案

以下方案默认以PostgreSQL语法为例,其他数据库可替换对应字符串函数即可。

1. 处理第一张表(表名shirt,目标字段mat)

需求:插入所有不包含bantlon关键词的条目,且合法条目的mat字段要删除bantlon及后方所有内容。

插入数据时直接处理(推荐)

INSERT INTO shirt (mat, 其余字段名)
SELECT 
  -- 裁剪字段内容:存在关键词则取前面的部分,不存在则返回原内容
  CASE 
    WHEN POSITION('bantlon' IN mat) > 0 THEN TRIM(LEFT(mat, POSITION('bantlon' IN mat) - 1))
    ELSE mat
  END AS processed_mat,
  其余字段对应值
FROM 数据源表
-- 过滤掉包含bantlon关键词的行
WHERE POSITION('bantlon' IN mat) = 0;

已全量插入数据后的事后清洗方案

-- 第一步:删除所有包含bantlon关键词的行
DELETE FROM shirt WHERE mat LIKE '%bantlon%';
-- 第二步:裁剪剩余合法行的mat字段
UPDATE shirt 
SET mat = TRIM(LEFT(mat, POSITION('bantlon' IN mat) - 1))
WHERE POSITION('bantlon' IN mat) > 0;

2. 处理第二张表(表名banto,目标字段mat)

逻辑和第一张表完全一致,仅需替换关键词为shirt即可。

插入数据时直接处理

INSERT INTO banto (mat, 其余字段名)
SELECT 
  CASE 
    WHEN POSITION('shirt' IN mat) > 0 THEN TRIM(LEFT(mat, POSITION('shirt' IN mat) - 1))
    ELSE mat
  END AS processed_mat,
  其余字段对应值
FROM 数据源表
WHERE POSITION('shirt' IN mat) = 0;

事后清洗方案

DELETE FROM banto WHERE mat LIKE '%shirt%';
UPDATE banto 
SET mat = TRIM(LEFT(mat, POSITION('shirt' IN mat) - 1))
WHERE POSITION('shirt' IN mat) > 0;

不同数据库的函数适配

  • MySQL:将POSITION(关键词 IN 字段名)替换为INSTR(字段名, 关键词),其余函数通用
  • SQL Server:将POSITION替换为CHARINDEX(关键词, 字段名),其余函数通用

内容的提问来源于stack exchange,提问作者Omar Gamal

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 00:36:02