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 REPLACE
en UPDATE
moet 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 t2
en het is niet nodig LIKE
in de WHERE
clausule.