1

我想在我的一个专栏中找到一个单词并将其替换为一些自定义文本。我有下表:

DECLARE @Table TABLE ( [Names] VARCHAR(100) )

INSERT INTO @Table
SELECT 'This is test module for testing' UNION
SELECT 'This is test module for to fork' UNION
SELECT 'This is test module for testing mod' UNION
SELECT 'This is testing' UNION
SELECT 'This is module'

我在下面解释我到底需要什么:

当用户搜索文本“test”并希望将其替换为“customtext”时,应选择以下行:

This is test module for testing
This is test module for to fork
This is test module for testing mod

并用“customtext”替换“test”(全字)后,更新的记录应该是:

This is customtext module for testing
This is customtext module for to fork
This is customtext module for testing mod

正如您可能已经注意到的那样,在上面包含部分文本“test”的情况下,我需要对完整的单词而不是像“testing”这样的部分文本进行搜索。

另一个解释相同要求的例子:

当用户搜索“mod”并希望将其替换为“customtext”时,应选择以下行:

This is test module for testing mod

用“customtext”替换后,更新的记录应该是:

This is test module for testing customtext

由于“mod”是完整的单词,它是被替换的单词,而不是包含部分文本“mod”的单词“module”。

4

4 回答 4

0

using like: 与我自己的样本数据的一些模式。首先,您可以为要替换的单词和要搜索的单词添加两个变量

* SQLFIDDLE 演示

样本数据表:

VNAME
smp tests farms
hellocoles
hell testing str
Anvil test NSW

询问:

select vname from 
vendor 
where '.' + vname + '.' 
LIKE '%[^a-z]test[^a-z]%'
;

结果:

VNAME
Anvil test NSW

这是更新查询:

update vendor
set vname = replace(vname,'test','newword')
from vendor 
where '.' + vname + '.' 
LIKE '%[^a-z]test[^a-z]%'
;

*更新前后查询DEMO

于 2013-01-09T21:29:28.680 回答
0
UPDATE TABLE_NAME
SET Column_NameA = replace(Column_NameA, 'test', 'customtext')
WHERE  (Column_NameA LIKE ('%' + ' ' + 'test' + ' ' + '%'))
于 2013-01-09T21:52:05.463 回答
0

我的解决方案;

DECLARE @Find VARCHAR(50) = 'test',
        @Replace VARCHAR(50) = 'customtext'
DECLARE @Table TABLE ( [Names] VARCHAR(100) )

INSERT INTO @Table
SELECT 'This is test module for testing' UNION
SELECT 'This is test module for to fork' UNION
SELECT 'This is test module for testing mod' UNION
SELECT 'This is testing' UNION
SELECT 'This is module'

SELECT *
    ,REPLACE(' ' + Names + ' ', ' ' + @Find + ' ', ' ' + @Replace + ' ')

FROM @Table
于 2013-01-09T22:30:44.537 回答
-3

你可以使用简单的正则表达式,如 (^|\s)text($|\s),还是我不理解这个问题?

于 2013-01-09T21:26:36.443 回答