SQL Server tablo sütununda bir dize değiştirme


364

SQL SeverYolları ( UNCveya başka türlü) başvuran bir tablo ( ) var , ama şimdi yol değişecek.

Yol sütununda, çok sayıda kaydım var ve yolun sadece bir bölümünü değiştirmem gerekiyor, ancak tüm yolu değiştirmem gerekiyor. Ve her kayıtta aynı dizeyi yenisine değiştirmem gerekiyor.

Bunu basit bir yöntemle nasıl yapabilirim update?

Yanıtlar:


604

Bu kadar kolay:

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

43
Çok where path like '%oldstring%'fazla veri olsaydı genellikle eklerdim .
Derek Tomes

1
Tabloda 50 satırım varsa ve 10 satırı değiştirme işleviyle değiştiriyorsam, nerede koşul yoksa, 10 satırı değiştirmesine rağmen, koşul mantıklıdır. Ancak, yukarıdaki yorumda belirtildiği gibi durumunuz varsa, sadece 10 satırı etkiler.
iMalek

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

üzgünüm, on yıl sonra nitpicky olmamakla birlikte, foodeğiştiriliyorsa veya bar (tekrar özür dilerim) cevaptan belli değil
Alex

28

Yukarıdakileri denedim ama doğru sonucu vermedi. Aşağıdakiler yapar:

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

11
Bu, replace yöntemini kullanma amacını tamamen ortadan kaldırır. Aynı şeyi şu şekilde de yapabilirsiniz: update table set path = 'newstring' nerede path = 'oldstring';
Ian

11
belki demek istedin where path like '%oldstring%'?
v010dya

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İşlev olmadan bir hata aldım

Bağımsız değişken veri türü ntext, replaceişlevin 1 bağımsız değişkeni için geçersiz .


9

Bu sorguyu kullanabilirsiniz

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

8

tüm cevaplar harika ama sadece size iyi bir örnek vermek istiyorum

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

bu SQL ifadesi, verilen ifadenin (birinci parametre) içindeki "table" (ikinci parametre) kelimesinin varlığını üçüncü parametre ile değiştirir

başlangıç ​​değeri, this value from tableancak replace işlevini yürüttükten sonrathis value from table but updated

ve işte gerçek bir örnek

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

örneğin bu değere sahipsek

10.7440/perifrasis.2010.1.issue-1

olacak

10.25025/perifrasis.2010.1.issue-1

Umarım bu size daha iyi görselleştirme sağlar


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

burada "ImagePath" sütun ismimdir.
"NewImagePath" temporery sütunu "ImagePath" ın içerdiği ad
"~ /" geçerli dizemdir . (Eski dize)
"../" benim gerekli
dizemdir . (Yeni dize) "tblMyTable" veritabanındaki tablodur.


4

Hedef sütun türü metin gibi varchar / nvarchar dışındaysa , sütun değerini dize olarak yayınlamamız ve ardından şu şekilde dönüştürmemiz gerekir:

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

2

Yolu değiştirme fonksiyonu yardımıyla değiştirmeniz gerekir.

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

buraya column_name değiştirmek istediğiniz sütunu ifade eder.

Umarım işe yarar.


0

Ayrıca çalışma zamanında e-posta şablonu için büyük metni değiştirebilirsiniz, işte bunun için basit bir örnek.

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
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.