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

如何修复SQL near "("语法错误 删除字段中/到&间所有字符

错误原因
  • 触发语法报错的核心原因:你当前使用的SQLite环境要么版本过低(低于3.7.15)不支持INSTR()函数,解析器无法识别函数名,遇到后续的左括号就抛出syntax error near "(";要么是你错误给INSTR()传入了正则表达式'/.+&'——INSTR()本身是精确子串匹配函数,不支持任何正则通配语法,异常的参数格式也可能触发解析报错。
  • 语句逻辑完全不满足需求:就算INSTR()能正常匹配内容,你写的substr(Perevod, 匹配位置-1)只会截取匹配点之后的字符串,直接丢失/前面的所有有效内容,也没有做&前后内容的拼接,根本实现不了“删除指定区间字符”的效果。
正确解决方案

以下方案基于SQLite内置字符串函数实现,不需要额外安装扩展,WHERE条件做了双重校验,仅对同时存在/、且/后方存在&的行做处理,不会改动不符合匹配规则的记录。注意:执行更新前务必先执行查询语句验证结果,避免数据误改无法恢复。

先验证处理结果

执行以下查询确认处理逻辑符合你的预期:
如果需求是保留/和&本身,仅删除两个字符中间的内容(例:a/b&c处理后为a/&c),执行:

SELECT 
  Perevod AS 原始值,
  SUBSTR(Perevod, 1, INSTR(Perevod, '/')) || SUBSTR(Perevod, INSTR(SUBSTR(Perevod, INSTR(Perevod, '/')), '&') + INSTR(Perevod, '/') - 1) AS 处理后值
FROM bal
WHERE INSTR(Perevod, '/') > 0 
  AND INSTR(SUBSTR(Perevod, INSTR(Perevod, '/')), '&') > 0;

如果需求是连同/和&两个字符一起删除(例:a/b&c处理后为ac),把查询里的处理逻辑替换为以下内容再执行:

SUBSTR(Perevod, 1, INSTR(Perevod, '/') - 1) || SUBSTR(Perevod, INSTR(SUBSTR(Perevod, INSTR(Perevod, '/')), '&') + INSTR(Perevod, '/')) AS 处理后值

确认结果后执行更新

对应「保留/和&、仅删中间内容」的更新语句:

UPDATE bal
SET Perevod = SUBSTR(Perevod, 1, INSTR(Perevod, '/')) 
  || SUBSTR(Perevod, INSTR(SUBSTR(Perevod, INSTR(Perevod, '/')), '&') + INSTR(Perevod, '/') - 1)
WHERE INSTR(Perevod, '/') > 0 
  AND INSTR(SUBSTR(Perevod, INSTR(Perevod, '/')), '&') > 0;

对应「删除/和&及中间全部内容」的更新语句:

UPDATE bal
SET Perevod = SUBSTR(Perevod, 1, INSTR(Perevod, '/') - 1) 
  || SUBSTR(Perevod, INSTR(SUBSTR(Perevod, INSTR(Perevod, '/')), '&') + INSTR(Perevod, '/'))
WHERE INSTR(Perevod, '/') > 0 
  AND INSTR(SUBSTR(Perevod, INSTR(Perevod, '/')), '&') > 0;

内容的提问来源于stack exchange,提问作者JOHN SMITH

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 15:57:52