Aktualisieren Sie einen Spaltenwert und ersetzen Sie einen Teil einer Zeichenfolge

325

Ich habe eine Tabelle mit den folgenden Spalten in einer MySQL-Datenbank

[id, url]

Und die URLs sind wie:

 http://domain1.com/images/img1.jpg

Ich möchte alle URLs auf eine andere Domain aktualisieren

 http://domain2.com/otherfolder/img1.jpg

Behalten Sie den Namen der Datei bei.

Welche Abfrage muss ich ausführen?

Addev
quelle
Mögliches Duplikat der MySQL-Zeichenfolge ersetzen
Steve Chambers

Antworten:

680
UPDATE urls
SET url = REPLACE(url, 'domain1.com/images/', 'domain2.com/otherfolder/')
Dmytro Shevchenko
quelle
162
UPDATE yourtable
SET url = REPLACE(url, 'http://domain1.com/images/', 'http://domain2.com/otherfolder/')
WHERE url LIKE ('http://domain1.com/images/%');

relevante Dokumente: http://dev.mysql.com/doc/refman/5.5/en/string-functions.html#function_replace

Marc B.
quelle
13
Hallo, warum brauche ich das wo?
Guy Cohen
14
@GuyCohen Da sonst die Abfrage jede einzelne Zeile in der Tabelle ändert. Die WHEREKlausel optimiert die Abfrage so, dass nur die Zeilen mit einer bestimmten URL geändert werden. Logischerweise ist das Ergebnis das gleiche, aber das Hinzufügen von WHEREbeschleunigt den Vorgang.
Dmytro Shevchenko
3
Dadurch wird WHEREauch sichergestellt, dass Sie nur Teile von Zeichenfolgen ersetzen, die mit http://etc/etc/oder beginnen.string_to_be_replaced. In der angegebenen Antwort http://domain1.com/images/this/is/a/testwäre dies beispielsweise betroffen, jedoch foobar/http://domain1.com/images/nicht.
Kyle Challis
27

Versuchen Sie es mit der REPLACE-Funktion :

mysql> SELECT REPLACE('www.mysql.com', 'w', 'Ww');
        -> 'WwWwWw.mysql.com'

Beachten Sie, dass zwischen Groß- und Kleinschreibung unterschieden wird.

schellack
quelle
2
@UniversalGrasp Sehen Sie viele mögliche Antworten hier: stackoverflow.com/questions/5656056/…
Jonathan Bergeron
9

Sie benötigen die WHERE- Klausel, um NUR die Datensätze zu ersetzen , die der Bedingung in der WHERE-Klausel entsprechen (im Gegensatz zu allen Datensätzen). Sie verwenden das % -Zeichen, um eine Teilzeichenfolge anzugeben: IE

LIKE ('...//domain1.com/images/%');

Mittel alle Datensätze, die BEGIN mit "...//domain1.com/images/"und etwas AFTER haben (die das ist %für ...)

Ein anderes Beispiel:

LIKE ('%http://domain1.com/images/%')

was bedeutet, alle Datensätze, die enthält "http://domain1.com/images/"

in irgendeinem Teil der Zeichenfolge ...

Kenneth Daly
quelle
7

Versuche dies...

update [table_name] set [field_name] = 
replace([field_name],'[string_to_find]','[string_to_replace]');
ManiMaran A.
quelle
1

Zuerst muss überprüft werden

SELECT * FROM universityWHERE Kursname LIKE '% & amp%'

Als nächstes muss aktualisiert werden

UPDATE Universität SET Kursname = REPLACE (Kursname, '& amp', '&') WHERE ID = 1

Ergebnisse: Engineering & Amp Technology => Engineering & Technology

TechyFlick
quelle