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?

Jawaban:


604

Ini semudah ini:

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

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/')

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'

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.


9

Anda dapat menggunakan kueri ini

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

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


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.


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'

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.


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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.