我在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>
答案 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*';