SQLite条件替换字符串为含换行内容的查询语句求助
解决SQLite更新语句的问题
我来帮你搞定这个SQLite的更新需求~首先你的原语句没生效,核心问题是UPDATE的语法顺序搞错了,另外还有个细节是CHAR(13)的处理方式不对,我一步步给你拆解:
原语句的问题
你写的UPDATE Slovník WHERE Phrase = 1 SET Note = ...违反了SQL的语法规则,正确的顺序应该是:UPDATE 表名 SET 列=更新值 WHERE 条件,把WHERE子句放在SET后面才对。
正确的解决方案
首先,建议你先执行查询确认要更新的目标行,避免误操作:
SELECT Note FROM "Slovník" WHERE Phrase = 1 AND Note LIKE '%); "%';
这条语句会列出所有符合Phrase=1且Note包含'); "的行,你可以先核对这些内容是否是你想要修改的。
然后执行正确的UPDATE语句:
UPDATE "Slovník" SET Note = REPLACE(Note, '); "', ')' || CHAR(13) || '"') WHERE Phrase = 1;
关键细节说明
- 语法顺序修正:把SET子句放在WHERE前面,这是SQL标准的语法要求,之前的顺序会被SQLite判定为语法错误,所以执行失败。
- CHAR(13)的正确使用:如果你直接写
')CHAR(13)"',SQLite会把它当成普通字符串替换,而不是生成回车符。用||拼接CHAR(13)函数的返回值,才能真正把分号替换成回车符(CHAR(13)对应ASCII里的回车字符)。 - 表名的引号:因为你的表名
Slovník包含特殊字符(重音符号),所以要用双引号"Slovník"括起来,避免解析错误。 - BOOL类型匹配:SQLite里的BOOL类型本质是整数,
Phrase=1和Phrase=TRUE效果是一样的,你可以根据习惯选择。
注意事项
执行UPDATE前最好先备份你的数据库,或者用上面的SELECT语句验证目标行,确保不会误修改其他数据。
内容的提问来源于stack exchange,提问作者Josef H.
相关产品推荐
相关产品推荐

