AKTUALIZACJA i WYMIANA części ciągu

427

Mam stół z dwiema kolumnami IDi Value. Chcę zmienić część niektórych ciągów w drugiej kolumnie.

Przykład tabeli:

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

Teraz 123\w Valueciąg nie jest potrzebne. Próbowałem UPDATEi REPLACE:

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

Podczas wykonywania skryptu SQL Server nie zgłasza błędu, ale też niczego nie aktualizuje. Dlaczego?

aston_zh
źródło
8
Nic nie zastępuje, ponieważ symbole wieloznaczne nie są traktowane jak symbole wieloznaczne, ale raczej jako literały.
stuhpa

Odpowiedzi:

700

Nie potrzebujesz symboli wieloznacznych w REPLACE- znajduje tylko ciąg, który wpisujesz dla drugiego argumentu, więc następujące powinny działać:

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

(Dodałem również \w zastępstwie, ponieważ zakładam, że nie jest to również potrzebne)

Jon Egerton
źródło
1
Działa kratka, ale nie z typem ntext :( ... >> Msg 8116, poziom 16, stan 1, wiersz 21 - Typ danych argumentu ntext jest niepoprawny dla argumentu 1 funkcji replace.
Owidat
6
Właśnie znalazłem rozwiązanie :) ===> stackoverflow.com/questions/4341613/…
Owidat
2
Zaraz, co jest z `? isn't that escaping the postacią i sprawia, że ​​jest to niepoprawne?
Meekohi
To było pomocne
Stanley Okpala Nwosa,
To nie zadziała, jeśli typem kolumny jest Tekst lub NText, zobacz tę odpowiedź stackoverflow.com/questions/4341613/...
Adil H. Raza
55

Spróbuj usunąć %znaki jak poniżej

UPDATE dbo.xxx
SET Value = REPLACE(Value, '123', '')
WHERE ID <=4
Robert
źródło
40

Aby zapytanie działało szybciej w dużych tabelach, w których nie każda linia wymaga aktualizacji, możesz także zaktualizować tylko wiersze, które zostaną zmodyfikowane:

UPDATE dbo.xxx
SET Value = REPLACE(Value, '123', '')
WHERE ID <= 4
AND Value LIKE '%123%'
xinux
źródło
17

pytanie:

UPDATE tablename 
SET field_name = REPLACE(field_name , 'oldstring', 'newstring') 
WHERE field_name LIKE ('oldstring%');
maneesh
źródło
idealne zapytanie Dziękuję
Raju Paladiya
8

Masz jedną tabelę z kodem daty, który jest siedmioznakowy

"32-1000"

Teraz chcesz wymienić wszystkie

"32-"

Z

"14-"

Zapytanie SQL, które musisz uruchomić, to

Update Products Set Code = replace(Code, '32-', '14-') Where ...(Put your where statement in here)
RASKOLNIKOV
źródło
3

Dla każdego, kto chce zastąpić twój skrypt.

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

ManhNguyen
źródło
4
Z kolejki recenzji : Czy mogę prosić o dodanie kontekstu wokół kodu źródłowego. Odpowiedzi zawierające tylko kod są trudne do zrozumienia. Pomoże zarówno pytającemu, jak i przyszłym czytelnikom, czy możesz dodać więcej informacji w swoim poście.
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
źródło
1
Wyjaśnij, w jaki sposób twoja odpowiedź rozwiązuje problem, pomoże to wszystkim zrozumieć twoje rozwiązanie z większą jasnością i do wykorzystania w przyszłości.
Aziz
1

powinieneś użyć poniższego zapytania o aktualizację

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

Każde z powyższych zapytań powinno działać.

DotnetCoder
źródło
0

zamień na perskie słowo

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

help: dbo.TblNews - nazwa tabeli

słowa kluczowe - nazwa fild

سیدرسول میرعظیمی
źródło