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?


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)


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

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%'

17

pertanyaan:

UPDATE tablename 
SET field_name = REPLACE(field_name , 'oldstring', 'newstring') 
WHERE field_name LIKE ('oldstring%');

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)

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%


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 

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.


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.