2012-05-10 126 views
81

是否有可能在SQLite表中使用SQL替换部分字符串?SQLite - 替换部分字符串

例如,我有一个表格,其中一个字段包含文件的路径。 是否可以替换部分字符串,例如

c:\afolder\afilename.bmp 

成为

c:\anewfolder\afilename.bmp 

回答

166

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

其他字符串处理函数(及以上)都在SQLite core functions list

详述下面应该指向你在正确的方向。

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

+4

虽然WHERE子句是没有必要的,它确实给了一点安心。如果没有WHERE,SqlLite会告诉你表中的每一行都受到影响。通过使用WHERE,你只会得到你期望的十几行,而不是可能的数千行。 –

+2

@WestonWedding我比较了有和没有WHERE子句的查询时间。没有哪里查询需要两次。 –

20

@Andrew答案是部分正确。无需使用WHERE条款这里:

  1. C:\afolder只有场无论如何都会被影响,没有理由去检查一下。这太过分了。
  2. 'C:\afolder\%'只会选择仅以C:\afolder\开头的字段。如果你在字符串内部有这条路径怎么办?

所以正确的查询就是:

UPDATE table SET field = replace(field, 'C:\afolder\', 'C:\anewfolder\'); 
+0

这会替换列“字段”中每个字符串中的字符串吗? – fifaltra

+0

@fifaltra是的 – resedasue

6

如果你只想做一个查询,没有持久的后果:

SELECT fieldA, replace(field, 'C:\afolder\', 'C:\anewfolder\'), fieldB FROM table;