SQL将数据添加到已填充的单元格中

时间:2012-12-23 03:11:30

标签: sql

我不知道要做什么会这么做,所以我不知道怎么做很多搜索。

以下是示例数据库:

 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

关于如何完成这项工作的任何想法?

4 个答案:

答案 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 answerthese 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