UPDATE und REPLACE Teil eines Strings

426

Ich habe eine Tabelle mit zwei Spalten IDund Value. Ich möchte einen Teil einiger Zeichenfolgen in der zweiten Spalte ändern.

Beispiel einer Tabelle:

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

Jetzt wird das 123\in der ValueZeichenfolge nicht mehr benötigt. Ich habe versucht UPDATEund REPLACE:

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

Wenn ich das Skript ausführe, meldet SQL Server keinen Fehler, aktualisiert aber auch nichts. Warum ist das so?

aston_zh
quelle
8
Es ersetzt nichts, da die Platzhalter nicht als Platzhalter, sondern als Literale behandelt werden.
stuhpa

Antworten:

699

Sie benötigen keine Platzhalter in der REPLACE- es findet nur die Zeichenfolge, die Sie für das zweite Argument eingeben, daher sollte Folgendes funktionieren:

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

(Ich habe auch das \im Ersetzen hinzugefügt , da ich davon ausgehe, dass Sie das auch nicht brauchen)

Jon Egerton
quelle
1
Es funktioniert Gitter, aber nicht mit ntext Typ :( ... >> Nachricht 8116, Ebene 16, Zustand 1, Zeile 21 - Argument Datentyp ntext ist für Argument 1 der Ersetzungsfunktion ungültig.
Owidat
6
Ich habe gerade die Lösung gefunden :) ===> stackoverflow.com/questions/4341613/…
Owidat
2
Warten Sie, was ist mit dem `? isn't that escaping the '`Zeichen und macht dies falsch?
Meekohi
Dies war hilfreich
Stanley Okpala Nwosa
Dies funktioniert nicht, wenn Ihr Spaltentyp Text oder NText ist. Siehe diese Antwort stackoverflow.com/questions/4341613/…
Adil H. Raza
55

Versuchen Sie, %Zeichen wie unten zu entfernen

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

Damit die Abfrage in großen Tabellen schneller ausgeführt wird, in denen nicht jede Zeile aktualisiert werden muss, können Sie auch festlegen, dass nur Zeilen aktualisiert werden, die geändert werden:

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

Abfrage:

UPDATE tablename 
SET field_name = REPLACE(field_name , 'oldstring', 'newstring') 
WHERE field_name LIKE ('oldstring%');
maneesh
quelle
perfekte Abfrage Danke
Raju Paladiya
8

Sie haben eine Tabelle, in der Sie einen Datumscode haben, der aus sieben Zeichen besteht

"32-1000"

Jetzt möchten Sie alle ersetzen

"32-"

Mit

"14-"

Die SQL-Abfrage, die Sie ausführen müssen, lautet

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

Für alle, die Ihr Skript ersetzen möchten.

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

ManhNguyen
quelle
4
Aus der Überprüfungswarteschlange : Darf ich Sie bitten, einen Kontext um Ihren Quellcode hinzuzufügen. Nur-Code-Antworten sind schwer zu verstehen. Es wird sowohl dem Fragesteller als auch zukünftigen Lesern helfen, wenn Sie Ihrem Beitrag weitere Informationen hinzufügen können.
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
quelle
1
Bitte erläutern Sie, wie Ihre Antwort das Problem löst. Sie hilft jedem, Ihre Lösung klarer und zum späteren Nachschlagen zu verstehen.
Aziz
1

Sie sollten die folgende Update-Abfrage verwenden

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

Jede der oben genannten Abfragen sollte funktionieren.

DotnetCoder
quelle
0

für persisches Wort ersetzen

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

Hilfe: dbo.TblNews - Tabellenname

keyWords - fild name

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