UPDATE dan REPLACE bagian dari sebuah string

427

Saya punya meja dengan dua kolom, IDdan Value. Saya ingin mengubah bagian dari beberapa string di kolom kedua.

Contoh Tabel:

ID            Value
---------------------------------
1             c:\temp\123\abc\111
2             c:\temp\123\abc\222
3             c:\temp\123\abc\333
4             c:\temp\123\abc\444

Sekarang 123\dalam Valuestring tidak diperlukan. Saya mencoba UPDATEdan REPLACE:

UPDATE dbo.xxx
SET Value = REPLACE(Value, '%123%', '')
WHERE ID <= 4

Ketika saya menjalankan skrip SQL Server tidak melaporkan kesalahan, tetapi juga tidak memperbarui apa pun. Mengapa demikian?

aston_zh
sumber
8
Itu tidak menggantikan apa pun karena wildcard tidak diperlakukan sebagai wildcard tetapi sebagai literal.
stuhpa

Jawaban:

700

Anda tidak memerlukan wildcard di REPLACE- itu hanya menemukan string yang Anda masukkan untuk argumen kedua, jadi berikut ini akan berfungsi:

UPDATE dbo.xxx
SET Value = REPLACE(Value, '123\', '')
WHERE ID <=4

(Saya juga menambahkan \di ganti karena saya menganggap Anda tidak perlu itu juga)

Jon Egerton
sumber
1
Ini bekerja parut, tetapi tidak dengan jenis ntext :( ... >> Msg 8116, Level 16, Negara 1, Baris 21 - Tipe data argumen ntext tidak valid untuk argumen 1 dari fungsi ganti.
Owidat
6
Saya baru saja menemukan solusinya :) ===> stackoverflow.com/questions/4341613/…
Owidat
2
Tunggu, ada apa dengan karakter `? isn't that escaping the '' dan membuat ini salah?
Meekohi
Ini membantu
Stanley Okpala Nwosa
Ini tidak akan berfungsi jika tipe kolom Anda adalah Teks atau NText, lihat jawaban ini stackoverflow.com/questions/4341613/…
Adil H. Raza
55

Cobalah untuk menghapus %karakter seperti di bawah ini

UPDATE dbo.xxx
SET Value = REPLACE(Value, '123', '')
WHERE ID <=4
Robert
sumber
40

Untuk membuat kueri berjalan lebih cepat dalam tabel besar di mana tidak setiap baris perlu diperbarui, Anda juga dapat memilih untuk hanya memperbarui baris yang akan diubah:

UPDATE dbo.xxx
SET Value = REPLACE(Value, '123', '')
WHERE ID <= 4
AND Value LIKE '%123%'
xinux
sumber
17

pertanyaan:

UPDATE tablename 
SET field_name = REPLACE(field_name , 'oldstring', 'newstring') 
WHERE field_name LIKE ('oldstring%');
maneesh
sumber
perfect query Terima kasih
Raju Paladiya
8

Anda memiliki satu tabel di mana Anda memiliki Kode tanggal yang kira-kira tujuh karakter

"32-1000"

Sekarang Anda ingin mengganti semua

"32-"

Dengan

"14-"

Kueri SQL yang harus Anda jalankan adalah

Update Products Set Code = replace(Code, '32-', '14-') Where ...(Put your where statement in here)
RASKOLNIKOV
sumber
3

Bagi siapa pun yang ingin mengganti skrip Anda.

update dbo.[TABLE_NAME] set COLUMN_NAME= replace(COLUMN_NAME, 'old_value', 'new_value') where COLUMN_NAME like %CONDITION%

ManhNguyen
sumber
4
Dari antrian ulasan : Boleh saya minta Anda untuk menambahkan beberapa konteks di sekitar kode sumber Anda. Jawaban khusus kode sulit dipahami. Ini akan membantu penanya dan pembaca di masa mendatang jika Anda dapat menambahkan lebih banyak informasi dalam posting Anda.
RBT
1
CREATE TABLE tbl_PersonalDetail
(ID INT IDENTITY ,[Date] nvarchar(20), Name nvarchar(20), GenderID int);

INSERT INTO Tbl_PersonalDetail VALUES(N'18-4-2015', N'Monay', 2),
                                     (N'31-3-2015', N'Monay', 2),
                                     (N'28-12-2015', N'Monay', 2),
                                     (N'19-4-2015', N'Monay', 2)

DECLARE @Date Nvarchar(200)

SET @Date = (SELECT [Date] FROM Tbl_PersonalDetail WHERE ID = 2)

Update Tbl_PersonalDetail SET [Date] = (REPLACE(@Date , '-','/')) WHERE ID = 2 
Mike Clark
sumber
1
Tolong jelaskan bagaimana jawaban Anda memecahkan masalah, itu akan membantu semua orang memahami solusi Anda dengan lebih jelas dan untuk referensi di masa mendatang.
Aziz
1

Anda harus menggunakan kueri pembaruan di bawah ini

UPDATE dbo.xxx SET Value=REPLACE(Value,'123\','') WHERE Id IN(1, 2, 3, 4)

UPDATE dbo.xxx SET Value=REPLACE(Value,'123\','') WHERE Id <= 4

Salah satu dari pertanyaan di atas harus berfungsi.

DotnetCoder
sumber
0

ganti untuk kata persia

UPDATE dbo.TblNews
SET keyWords = REPLACE(keyWords, '-', N'،')

bantuan: dbo.TblNews - nama tabel

keyWords - nama kecil

سیدرسول میرعظیمی
sumber