在SQLite中更改许多字段的一部分

时间:2014-10-15 15:58:12

标签: sqlite

我在SQLite数据库中有一个表,其中有几千行,Name1和Name2为两列。在许多情况下,Name1是LLC或其他业务,Name2是该公司的联系人。 Name2列中的条目通常以' C / O'开头。但有些人开始于'%'以及其他有CO' CO'或者' Care of。'

的其他缩写

有没有办法轻易取代只有一个'%'或者' CO'用' C / O'没有改变其余的领域?

例如,如果我有这些条目:

% Grace Hopper
% Charles Babbage
% Fred Astaire

我知道我可以只选择百分号('%'在LIKE中使用的问题除外)并只获取以它开头的那些字段,但是有一些方法可以使用查询有一个UPDATE来替换那个部分的场地,剩下的就剩下了吗?或者将字段的其余部分读入变量并在UPDATE语句中使用它?结果将是:

C/O Grace Hopper
C/O Charles Babbage
C/O Fred Astaire

我知道我可以用几种语言的脚本来读取字段,编辑字符串,然后使用UPDATE语句,但我想知道是否有SQL方法可以做到。< / p>

2 个答案:

答案 0 :(得分:1)

SQLite有一个replace(haystack, needle, replacement)函数,但它将在字符串中的所有匹配项上运行,而不仅仅是第一个。

所以

UPDATE table SET column = replace(column, 'CO', 'C/O') 
   WHERE column LIKE 'CO%' AND NOT LIKE '_%CO%'

会让您关闭CO更新。然后,您需要查看仍然“LIKE”CO%'的所有记录(如果有),并手动更新它们。

查找和替换%案例更难,因为%当然是SQL中的“匹配任何”字符。在这种情况下,您需要转义搜索字词。

答案 1 :(得分:1)

当您知道要搜索的前缀有多长时,您可以使用substr()获取字符串的其余部分:

UPDATE MyTable SET Name2 = 'C/O' || substr(Name2, 2) WHERE Name2 GLOB '%*';
UPDATE MyTable SET Name2 = 'C/O' || substr(Name2, 3) WHERE Name2 GLOB 'CO*';