SQLite - 替换字符串的一部分

col*_*lin 97 sql sqlite

是否可以SQLSQLite表中使用来替换字符串的一部分?

例如,我有一个表,其中一个字段保存文件的路径.是否可以替换部分字符串,例如

c:\afolder\afilename.bmp
Run Code Online (Sandbox Code Playgroud)

c:\anewfolder\afilename.bmp
Run Code Online (Sandbox Code Playgroud)

And*_*rew 195

您可以使用内置replace()函数在查询中执行字符串替换.

SQLite核心功能列表中详细介绍了其他字符串操作函数(以及更多)

以下内容应指向正确的方向.

UPDATE table SET field = replace( field, 'C:\afolder\', 'C:\anewfolder\' ) WHERE field LIKE 'C:\afolder\%';

  • 虽然WHERE子句不是必需的,但它确实给了一点安心.如果没有WHERE,SqlLite会告诉您表中的每一行都受到影响.通过使用WHERE,您只能获得预期的十几行而不是数千行. (6认同)
  • @WestonWedding我比较了有和没有WHERE子句的查询时间.没有在哪里查询需要两次时间. (2认同)

vla*_*ras 28

@Andrew的回答是部分正确的.WHERE这里不需要使用条款:

  1. 只有包含的字段C:\afolder无论如何都会受到影响,没有理由进行检查.这太过分了.
  2. 'C:\afolder\%'将仅选择仅以字母开头的字段C:\afolder\.如果你在字符串里面有这个路径怎么办?

所以正确的查询只是:

UPDATE table SET field = replace( field, 'C:\afolder\', 'C:\anewfolder\');
Run Code Online (Sandbox Code Playgroud)


bug*_*123 8

如果您只想在查询中执行此操作而不会产生持久影响:

SELECT fieldA, replace(field, 'C:\afolder\', 'C:\anewfolder\'), fieldB FROM table;
Run Code Online (Sandbox Code Playgroud)