1

自分の列の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

「test」(フルワード)を「customtext」に置き換えた後、更新されるレコードは次のようになります。

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
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 に答える
0

using like: 自分のサンプルデータを使用したパターンを使用します。まず、置換する単語と検索する単語に対して 2 つの変数を追加できます。

* 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 に答える
-3

(^|\s)text($|\s) のような単純な正規表現を使用できますか、それとも問題がわかりませんか?

于 2013-01-09T21:26:36.443 に答える