Cara mengganti string di Kolom Tabel SQL Server

364

Saya punya tabel ( SQL Sever) yang mereferensikan path ( UNCatau sebaliknya), tetapi sekarang path akan berubah.

Di kolom jalur, saya memiliki banyak catatan dan saya perlu mengubah hanya sebagian dari jalur, tetapi tidak seluruh jalur. Dan saya perlu mengubah string yang sama ke yang baru, di setiap record.

Bagaimana saya bisa melakukan ini dengan sederhana update?

Iralda Mitro
sumber

Jawaban:

604

Ini semudah ini:

update my_table
set path = replace(path, 'oldstring', 'newstring')
cjk
sumber
43
Saya biasanya menambahkan where path like '%oldstring%'jika ada banyak data.
Derek Tomes
1
di mana kondisi masuk akal karena jika saya memiliki 50 baris dalam tabel dan jika saya mengganti 10 baris dengan fungsi ganti itu mempengaruhi semua 50 baris, meskipun itu menggantikan 10 baris jika Anda tidak memiliki kondisi di mana. Tetapi jika Anda memiliki kondisi seperti yang disebutkan dalam komentar di atas itu hanya mempengaruhi 10 baris.
iMalek
132
UPDATE [table]
SET [column] = REPLACE([column], '/foo/', '/bar/')
Marc Gravell
sumber
1
maaf, tidak menjadi nitpicky setelah sepuluh tahun tetapi tidak jelas dari jawabannya apakah foosedang diganti atau bar (maaf lagi)
Alex
28

Saya mencoba di atas tetapi tidak memberikan hasil yang benar. Yang berikut ini tidak:

update table
set path = replace(path, 'oldstring', 'newstring') where path = 'oldstring'
Caesar
sumber
11
Ini benar-benar mengalahkan tujuan menggunakan metode ganti. Anda dapat mencapai hal yang sama seperti ini: tabel pembaruan set path = 'newstring' where path = 'oldstring';
Ian
11
mungkin maksudmu 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%'

Tanpa CASTfungsi saya mendapat kesalahan

Tipe data argumen ntexttidak valid untuk argumen 1 replacefungsi.

Igor Bakay
sumber
9

Anda dapat menggunakan kueri ini

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

semua jawaban bagus tetapi saya hanya ingin memberi Anda contoh yang baik

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

pernyataan SQL ini akan menggantikan keberadaan kata "tabel" (parameter kedua) di dalam pernyataan yang diberikan (parameter pertama) dengan parameter ketiga

nilai awal adalah this value from tabletetapi setelah menjalankan fungsi ganti itu akan menjadithis value from table but updated

dan ini adalah contoh nyata

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

misalnya jika kita memiliki nilai ini

10.7440/perifrasis.2010.1.issue-1

itu akan menjadi

10.25025/perifrasis.2010.1.issue-1

Semoga ini memberi Anda visualisasi yang lebih baik

Basheer AL-MOMANI
sumber
6
select replace(ImagePath, '~/', '../') as NewImagePath from tblMyTable 

di mana "ImagePath" adalah Nama kolom saya.
"NewImagePath" adalah kolom temporery. Nama insted dari "ImagePath"
"~ /" adalah string saya saat ini. (String lama)
"../" adalah string yang saya requried. (String baru)
"tblMyTable" adalah tabel saya dalam database.

Durgesh Pandey
sumber
4

Jika jenis kolom target selain teks seperti varchar / nvarchar , kita perlu memberikan nilai kolom sebagai string dan kemudian mengonversinya sebagai:

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

Anda perlu mengganti jalur dengan bantuan fungsi ganti.

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

sini column_name merujuk pada kolom yang ingin Anda ubah.

Semoga ini akan berhasil.


sumber
0

Anda juga dapat mengganti teks besar untuk templat email pada waktu berjalan, berikut adalah contoh sederhana untuk itu.

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