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?


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)


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

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

16

Abfrage:

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

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)

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%


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 

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.


0

für persisches Wort ersetzen

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

Hilfe: dbo.TblNews - Tabellenname

keyWords - fild name

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.