MySQL-tekenreeks vervangen

Ik heb een kolom met URL’s (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

Ik wil het woord ‘updates’ wijzigen in ‘nieuws’. Is het mogelijk om dit met een script te doen?


Antwoord 1, autoriteit 100%

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

Nu rijen die eruitzagen als

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

zal zijn

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

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


Antwoord 2, autoriteit 11%

Ja, MySQL heeft een REPLACE()-functie:

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

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

Houd er rekening mee dat het gemakkelijker is als u daar een alias van maakt bij het gebruik van SELECT

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

Antwoord 3, autoriteit 2%

De replace-functie zou moeten werken voor jij.

REPLACE(str,from_str,to_str)

Retourneert de tekenreeks str met alle exemplaren van de tekenreeks from_str vervangen door de tekenreeks to_str. REPLACE()voert een hoofdlettergevoelige overeenkomst uit bij het zoeken naar from_str.


Antwoord 4

Je kunt gewoon de functie Replace() gebruiken.

Voorbeeld:

met waar-clausule-

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

zonder waar-clausule-

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

Opmerking: de bovenstaande query als u records rechtstreeks in de tabel wilt bijwerken, als u een selectiequery wilt en de gegevens in de tabel niet moeten worden beïnvloed, kunt u de volgende query gebruiken-

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

Antwoord 5

In aanvulling op het antwoord van gmaggioals u dynamisch REPLACEen UPDATEmoet gebruiken volgens een andere kolom, kunt u bijvoorbeeld het volgende doen:

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 mijn voorbeeld is de string articles/news/opgeslagen in other_table t2en het is niet nodig LIKEin de WHEREclausule.

Other episodes