MySQL string replace

Mam kolumnę zawierającą adresy URL (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
Chciałbym zmienić słowo "aktualizacje " na"wiadomości". Czy można to zrobić za pomocą skryptu?
 473
Author: William Perron, 2011-05-11

5 answers

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

Teraz wiersze, które były jak

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

Będzie

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

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

 1103
Author: Giraldi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-12-15 10:47:44

Tak, MySQL ma funkcję REPLACE ():

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

Zwróć uwagę, że łatwiej jest utworzyć alias przy użyciu SELECT

SELECT REPLACE(string_column, 'search', 'replace') as url....
 131
Author: onteria_,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-05-10 22:01:31

Funkcja replace powinna działać dla ciebie.

REPLACE(str,from_str,to_str)

Zwraca łańcuch str ze wszystkimi wystąpieniami łańcucha from_str zastąpionego łańcuchem to_str. REPLACE() wykonuje dopasowanie uwzględniające wielkość liter podczas wyszukiwania from_str.

 16
Author: Jay,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-06-22 14:38:56

Możesz po prostu użyć funkcji replace (),

Z klauzulą where -

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

Bez klauzuli where -

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

Uwaga: powyższe zapytanie jeśli dla rekordów aktualizacji bezpośrednio w tabeli, jeśli chcesz wybrać zapytanie i dane nie powinny być naruszone w tabeli, możesz użyć następującego zapytania-

select REPLACE(columnName,'from','to') as updateRecord;
 7
Author: Deepak Kumbhar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-01-30 11:41:03

Oprócz odpowiedzi gmaggio jeśli potrzebujesz dynamicznie REPLACE i UPDATE zgodnie z inną kolumną możesz zrobić na przykład:

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...

W moim przykładzie łańcuch articles/news/ jest przechowywany w other_table t2 i nie ma potrzeby używania LIKE w klauzuli WHERE.

 6
Author: RafaSashi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-10-13 16:09:11