web-dev-qa-db-ja.com

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

パス(UNCなど)を参照するテーブル(SQL Sever)がありますが、今度はパスが変わります。

Path列にはたくさんのレコードがあり、パスの一部だけを変更する必要がありますが、パス全体を変更する必要はありません。そして、すべてのレコードで、同じ文字列を新しい文字列に変更する必要があります。

単純なupdateを使ってこれを行うにはどうすればよいですか?

342
Iralda Mitro

これは簡単です。

update my_table
set path = replace(path, 'oldstring', 'newstring')
566
cjk
UPDATE [table]
SET [column] = REPLACE([column], '/foo/', '/bar/')
125
Marc Gravell

上記を試しましたが、正しい結果が得られませんでした。次のようにします。

update table
set path = replace(path, 'oldstring', 'newstring') where path = 'oldstring'
24
Caesar
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は、replace関数の引数1には無効です。

16
Igor Bakay

あなたはこのクエリを使用することができます

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

すべての答えは素晴らしいですが、私はちょうどあなたに良い例を挙げたいと思います。

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

このSQLステートメントは、与えられたステートメント(最初のパラメーター)内のWord "table"(2番目のパラメーター)の存在を3番目のパラメーターに置き換えます。

初期値はthis value from tableですが、replace関数を実行した後は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"からインスピレーションされた一時的な列の名前です
"〜/"は私の現在の文字列です(古い文字列)
"../"は私の必要な文字列です。(新しい文字列)
"tblMyTable"はデータベース内の私のテーブルです。

5
Durgesh Pandey

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

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

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

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
0
Shekhar Patel

あなたは置換機能の助けを借りてパスを置き換える必要があります。

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

ここでcolumn_nameはあなたが変更したい列を参照します。

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

0
Love Pandey