2

我不知道这样做会被称为什么,所以我不知道如何进行大量搜索。

这是和示例数据库:

 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

4 回答 4

2

在 SQLServer 2005+ 中使用STUFF函数

SELECT name, id, STUFF(code, 9, 1, ' ff ') AS Code
FROM your_table
于 2012-12-23T18:14:56.297 回答
1

我不认为有一种标准化的方法可以做到这一点,但是许多数据库都有对表列进行正则表达式操作的方法。例如,在 PostgreSQL 中,您可以这样做:

UPDATE table
SET code = regex_replace(code, '(.. .. ..) (.. ..)', E'\\1 ff \\2', '');

(注意:这段代码改编自这个答案这些文档,但我自己没有测试过,所以可能会有错误)

于 2012-12-23T03:29:22.130 回答
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
于 2012-12-23T07:21:11.210 回答
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
于 2012-12-23T03:19:54.650 回答