it-swarm.com.de

MySQL-String ersetzen

Ich habe eine Spalte mit URLs (ID, URL):

http://www.example.com/articles/updates/43
http://www.example.com/articles/updates/866
http://www.example.com/articles/updates/323
http://www.example.com/articles/updates/seo-url
http://www.example.com/articles/updates/4?something=test

Ich möchte das Wort "Updates" in "News" ändern. Kann man das mit einem Skript machen?

534
n00b
UPDATE your_table
SET your_field = REPLACE(your_field, 'articles/updates/', 'articles/news/')
WHERE your_field LIKE '%articles/updates/%'

Nun Reihen, die waren wie

http://www.example.com/articles/updates/43

wird sein

http://www.example.com/articles/news/43

http://www.electrictoolbox.com/mysql-find-replace-text/

1234
Giraldi

Ja, MySQL hat eine REPLACE () -Funktion:

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

http://dev.mysql.com/doc/refman/5.0/de/string-functions.html#function_replace

Beachten Sie, dass es einfacher ist, diesen Alias ​​zu erstellen, wenn Sie SELECT verwenden.

SELECT REPLACE(string_column, 'search', 'replace') as url....
140
onteria_

Die Ersetzen Funktion sollte für Sie funktionieren.

REPLACE(str,from_str,to_str)

Gibt den String str zurück, wobei alle Vorkommen des Strings from_str durch den String to_str ersetzt werden. REPLACE() sucht bei der Suche nach from_str nach Groß- und Kleinschreibung.

20
Jay

Sie können einfach die Funktion replace () verwenden.

mit where-Klausel

update tabelName set columnName=REPLACE(columnName,'from','to') where condition;

ohne where-Klausel

update tabelName set columnName=REPLACE(columnName,'from','to');

Hinweis: Die obige Abfrage kann für Aktualisierungsdatensätze direkt in der Tabelle, wenn Sie eine Auswahlabfrage wünschen und die Daten in der Tabelle nicht betroffen sein sollen, die folgende Abfrage verwenden -

select REPLACE(columnName,'from','to') as updateRecord;
8
Deepak Kumbhar

Zusätzlich zu gmaggios Antwort Wenn Sie nach einer anderen Spalte dynamisch REPLACE und UPDATE müssen, können Sie zum Beispiel Folgendes tun:

UPDATE your_table t1
INNER JOIN other_table t2
ON t1.field_id = t2.field_id
SET t1.your_field = IF(LOCATE('articles/updates/', t1.your_field) > 0, 
REPLACE(t1.your_field, 'articles/updates/', t2.new_folder), t1.your_field) 
WHERE...

In meinem Beispiel ist die Zeichenfolge articles/news/ in other_table t2 gespeichert, und es ist nicht erforderlich, LIKE in der WHERE -Klausel zu verwenden.

6
RafaSashi