SQL Serverテーブル列の文字列を置き換える方法


364

SQL Severパス(UNCまたはその他)を参照するテーブル()がありますが、パスが変更されます。

パス列には多くのレコードがあり、パス全体ではなく、パスの一部のみを変更する必要があります。そして、すべてのレコードで、同じ文字列を新しいものに変更する必要があります。

シンプルでこれを行うにはどうすればよいupdateですか?

回答:


604

これは簡単です。

update my_table
set path = replace(path, 'oldstring', 'newstring')

43
where path like '%oldstring%'データが多い場合は、通常、追加します。
Derek Tomes、2015年

1
where条件が意味をなすのは、テーブルに50行あり、replace関数で10行を置き換える場合、where条件がない場合に10行を置き換えても、50行すべてに影響するためです。ただし、上記のコメントで述べたようなwhere条件がある場合、影響を受けるのは10行のみです。
-iMalek

132
UPDATE [table]
SET [column] = REPLACE([column], '/foo/', '/bar/')

1
申し訳ありませんが、10年後のつまらないものではありませんが、foo交換されているか、またはbar (申し訳ありませんが)回答からは不明です
Alex

28

上記を試しましたが、正しい結果が得られませんでした。次のものは:

update table
set path = replace(path, 'oldstring', 'newstring') where path = 'oldstring'

11
これは、replaceメソッドを使用する目的を完全に無効にします。次のように同じことを実行できます。update table set path = 'newstring' where path = 'oldstring';
Ian

11
もしかしてwhere path like '%oldstring%'
v010dya 2016年

17
UPDATE CustomReports_Ta
SET vchFilter = REPLACE(CAST(vchFilter AS nvarchar(max)), '\\Ingl-report\Templates', 'C:\Customer_Templates')
where CAST(vchFilter AS nvarchar(max)) LIKE '%\\Ingl-report\Templates%'

なければCAST機能私は、エラーが発生しました

関数のntext引数1の引数データ型が無効ですreplace


9

このクエリを使用できます

update table_name set column_name = replace (column_name , 'oldstring' ,'newstring') where column_name like 'oldstring%'

8

すべての答えは素晴らしいですが、私はあなたに良い例をあげたいだけです

select replace('this value from table', 'table',  'table but updated')

このSQLステートメントは、指定されたステートメント(最初のパラメーター)内の「テーブル」という単語(2番目のパラメーター)の存在を3番目のパラメーターに置き換えます。

初期値はですthis value from tableが、置換機能を実行した後、this value from table but updated

これが実際の例です

UPDATE publication
SET doi = replace(doi, '10.7440/perifrasis', '10.25025/perifrasis')
WHERE doi like '10.7440/perifrasis%'

たとえば、この値がある場合

10.7440/perifrasis.2010.1.issue-1

なる

10.25025/perifrasis.2010.1.issue-1

これにより視覚化が向上することを願っています


6
select replace(ImagePath, '~/', '../') as NewImagePath from tblMyTable 

ここで、「ImagePath」は私の列名です。
"NewImagePath"は一時的な列です。名前は "ImagePath"に挿入されています。
"〜/"は現在の文字列です。(古い文字列)
"../"は必要な文字列です


4

ターゲット列タイプがtextのようにvarchar / nvarchar以外の場合、列値を文字列としてキャストし、それを次のように変換する必要があります

update URL_TABLE
set Parameters = REPLACE ( cast(Parameters as varchar(max)), 'india', 'bharat')
where URL_ID='150721_013359670'

2

置換機能を使用してパスを置換する必要があります。

update table_name set column_name = replace(column_name, 'oldstring', 'newstring')

ここに column_nameは、変更する列を参照しています。

それがうまくいくことを願っています。


0

また、実行時にメールテンプレートの大きなテキストを置き換えることもできます。これがその簡単な例です。

DECLARE @xml NVARCHAR(MAX)
SET @xml = CAST((SELECT [column] AS 'td','',        
        ,[StartDate] AS 'td'
         FROM [table] 
         FOR XML PATH('tr'), ELEMENTS ) AS NVARCHAR(MAX))
select REPLACE((EmailTemplate), '[@xml]', @xml) as Newtemplate 
FROM [dbo].[template] where id = 1
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.