更改SQLite中多个字段的一部分

更改SQLite中多个字段的一部分,sqlite,Sqlite,我在SQLite数据库中有一个表,有几千行,其中Name1和Name2是两列。在许多情况下,Name1是有限责任公司或其他企业,Name2是该公司的联系人。“名称2”列中的条目通常以“C/O”开头,但有些条目以“%”开头,另一些条目以“CO”或其他缩写词“Care of”开头 是否有任何方法可以轻松地将“%”或“CO”替换为“C/O”,而不改变字段的其余部分 例如,如果我有以下条目: % Grace Hopper % Charles Babbage % Fred Astaire 我知道我可以只

我在SQLite数据库中有一个表,有几千行,其中Name1和Name2是两列。在许多情况下,Name1是有限责任公司或其他企业,Name2是该公司的联系人。“名称2”列中的条目通常以“C/O”开头,但有些条目以“%”开头,另一些条目以“CO”或其他缩写词“Care of”开头

是否有任何方法可以轻松地将“%”或“CO”替换为“C/O”,而不改变字段的其余部分

例如,如果我有以下条目:

% Grace Hopper
% Charles Babbage
% Fred Astaire
我知道我可以只选择百分号(在LIKE ASTED中使用“%”的问题)并仅获取以它开头的字段,但是是否有某种方法可以使用带有更新的查询来仅替换字段的这一部分,而不处理其余部分?或者将字段的其余部分读入变量并在UPDATE语句中使用?结果将是:

C/O Grace Hopper
C/O Charles Babbage
C/O Fred Astaire
我知道我可以用几种语言的脚本来读取字段,编辑字符串,然后使用UPDATE语句,但我想知道是否有SQL方法可以做到这一点。

SQLite有一个
replace(haystack,needle,replacement)
函数,但它将对字符串中的所有事件进行操作,而不仅仅是第一次

所以

将使您接近
CO
更新。然后,您需要查看所有仍然“类似于”CO%”的记录(如果有),并手动更新它们


查找和替换
%
大小写比较困难,因为
%
当然是SQL中的“匹配任意”字符。在这种情况下,您需要转义搜索词。

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


只是为了验证-所以我肯定我有这个。如果我这样做,并使用“CO%”,那么它只会得到以CO开头的字段,所以我可以用WHERE子句限制它。对吗?而且,是的,我知道我将不得不逃避-,似乎每当你导入数据时,某个聪明的亚历克输入了一些更有用的东西,不是吗?如果使用
LIKE
CO%`您将只找到以
CO
开头的行,但您将更改字段中所有出现的
CO
,因此
CO-JOE-CONWAY
将变为
C/O-JOE-C/ONWAY
。这就是为什么我们省略了与
\u C/O%
匹配的记录并手动更新它们。好的-很高兴我询问并验证了这个细节!虽然我喜欢另一个答案,但它的优点是我不必手动更新任何字段。我也可以使用GLOB'CO*,只是为了确保它与“CORWIN,JOSEPH”这样的名称不匹配,我会知道我要替换的数据的长度。
UPDATE table SET column = replace(column, 'CO', 'C/O') 
   WHERE column LIKE 'CO%' AND NOT LIKE '_%CO%'
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*';