Bir dizenin UPDATE ve REPLACE kısmı


427

İki sütunlu bir masam var IDve Value. İkinci sütundaki bazı dizelerin bir kısmını değiştirmek istiyorum.

Tablo Örneği:

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

Şimdi 123\de Valuedize gerekli değildir. Denedim UPDATEve REPLACE:

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

Komut dosyasını yürüttüğümde SQL Server bir hata bildirmez, ancak hiçbir şeyi güncellemez. Neden?


8
Hiçbir şeyin yerini almaz, çünkü joker karakterler joker karakterler olarak değil, gerçek değerler olarak kabul edilir.
stuhpa

Yanıtlar:


700

İçinde joker karakterlere ihtiyacınız yoktur REPLACE- sadece ikinci argüman için girdiğiniz dizeyi bulur, bu yüzden aşağıdakilerin çalışması gerekir:

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

(Ben de \buna ihtiyacınız olmadığını varsayarsak yerine de ekledim )


1
Izgara çalışır, ancak ntext türüyle çalışmaz :( ... >> Msg 8116, Seviye 16, Durum 1, Satır 21 - Bağımsız değişken veri türü ntext, değiştir işlevinin 1. bağımsız değişkeni için geçersiz.
14'te

6
Çözümü buldum :) ===> stackoverflow.com/questions/4341613/…
Owidat

2
Bekle, `? isn't that escaping the `` karakteri ile olan ve bunu yanlış yapan nedir?
Meekohi

Bu yardımcı oldu
Stanley Okpala Nwosa

Sütun türünüz Metin veya NText ise bu çalışmaz, bu cevaba bakınız stackoverflow.com/questions/4341613/…
Adil H. Raza

55

Aşağıdaki %gibi karakterleri kaldırmaya çalışın

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

40

Sorgunun , her satırın güncellenmesi gerekmeyen büyük tablolarda daha hızlı çalışmasını sağlamak için yalnızca değiştirilecek satırları güncellemeyi de seçebilirsiniz:

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

17

sorgu:

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

mükemmel sorgu Teşekkür ederim
Raju Paladiya

8

Yedi karakterli bir tarih kodu olan bir tablonuz var.

"32-1000"

Şimdi hepsini değiştirmek istiyorsun

"32-"

İle

"14-"

Çalıştırmanız gereken SQL sorgusu

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

3

Komut dosyanızı değiştirmek isteyen herkes için.

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


4
İnceleme kuyruğundan : Lütfen kaynak kodunuzun etrafına bir bağlam eklemenizi isteyebilir miyim? Yalnızca kod yanıtlarının anlaşılması zordur. Gönderinize daha fazla bilgi ekleyebilmeniz hem askerlere hem de gelecekteki okuyuculara yardımcı olacaktır.
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
Lütfen cevabınızın sorunu nasıl çözdüğünü açıklayın, herkesin çözümünüzü daha net ve gelecekteki referansınız için anlamasına yardımcı olacaktır.
Aziz

1

aşağıdaki güncelleme sorgusunu kullanmalısınız

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

Yukarıdaki sorgulardan herhangi birinin çalışması gerekir.


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.