我不知道要做什么会这么做,所以我不知道怎么做很多搜索。
以下是示例数据库:
name id code
bob 1 Aa Bb cc DD ee
sue 3 aa Bb Cc Dd Ee
tom 8 AA BB cc dd EE
我希望能够在“C”组和“D”组之间添加“F”组。所以它会是:
name id code
bob 1 Aa Bb cc ff DD ee
sue 3 aa Bb Cc ff Dd Ee
tom 8 AA BB cc ff dd EE
关于如何完成这项工作的任何想法?
答案 0 :(得分:2)
在SQLServer 2005+中使用STUFF函数
SELECT name, id, STUFF(code, 9, 1, ' ff ') AS Code
FROM your_table
答案 1 :(得分:1)
update mytable set code = replace(code, "cc DD", "cc ff DD") -- where is optional;
以及cc和dd大写的其他变体的更多更新(总共16种变体):
update mytable set code = replace(code, "Cc DD", "Cc ff DD") -- where is optional;
update mytable set code = replace(code, "CC DD", "CC ff DD") -- where is optional;
update mytable set code = replace(code, "cC DD", "cC ff DD") -- where is optional;
-- etc
答案 2 :(得分:1)
我认为没有一种标准化的方法可以做到这一点,但许多数据库都有办法对表列进行正则表达式操作。例如,在PostgreSQL中,你可以这样做:
UPDATE table
SET code = regex_replace(code, '(.. .. ..) (.. ..)', E'\\1 ff \\2', '');
(注意:此代码改编自this answer和these docs,但我自己没有对其进行过测试,因此可能存在错误)
答案 3 :(得分:1)
由于您的列具有固定长度,因此无需搜索大写和小写字符的变体。您可以通过利用角色位置获得所需的内容。
使用left()
函数提取前8个字符,使用right()
提取最后5个字符,并将'ff'夹在两者之间。
注意我已在 SQL Server 上完成此操作,等效功能可以在其他数据库中轻松实现
UPDATE yourTable
set code = left(code,8)+' ff ' + right(code,5)
<强>输出强>
Aa Bb cc ff DD ee
aa Bb Cc ff Dd Ee
AA BB cc ff dd EE