MySQL wyszukiwanie i zamiana tekstu w polu

Jakie zapytanie MySQL wykona wyszukiwanie tekstowe i zastąpi w jednym konkretnym polu w tabeli?

Czyli wyszukaj foo i zamień na bar tak rekord z polem o wartości hello foo staje się hello bar.

Author: shgnInc, 2008-09-24

7 answers

Zmień table_name i field, aby dopasować nazwę tabeli i dane pole:

UPDATE table_name SET field = REPLACE(field, 'foo', 'bar') WHERE INSTR(field, 'foo') > 0;
 432
Author: Joe Skora,
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-11-07 11:20:31
UPDATE table_name 
SET field = replace(field, 'string-to-find', 'string-that-will-replace-it');
 78
Author: thesmallprint,
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-03 07:23:43

I jeśli chcesz wyszukać i zastąpić na podstawie wartości innego pola, możesz wykonać CONCAT:

update table_name set `field_name` = replace(`field_name`,'YOUR_OLD_STRING',CONCAT('NEW_STRING',`OTHER_FIELD_VALUE`,'AFTER_IF_NEEDED'));
Po prostu mieć ten Tutaj, żeby inni go od razu znaleźli.
 5
Author: basdog22,
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
2012-05-05 09:18:39
 UPDATE table SET field = replace(field, text_needs_to_be_replaced, text_required);

Jak na przykład, jeśli chcę zastąpić wszystkie wystąpienia Jana przez Marka użyję poniżej,

UPDATE student SET student_name = replace(student_name, 'John', 'Mark');
 5
Author: Umesh Patil,
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
2014-07-08 10:53:37

Funkcja Replace zrobi to.

 1
Author: Wayne,
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
2015-12-01 01:06:38

Użyłem powyższej linii poleceń w następujący sposób: update TABLE-NAME set FIELD = replace (FIELD, 'and','and'); celem było zastąpienie i z Oraz ("A" powinno być małe litery). Problem polega na tym, że nie może znaleźć "i" w bazie danych, ale jeśli używam jak " %i%", to może znaleźć go wraz z wieloma innymi ID, które są częścią słowa lub nawet te, które są już małe litery.

 0
Author: Schwann,
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
2014-08-22 23:33:30

Z mojego doświadczenia wynika, że najszybszą metodą jest

UPDATE table_name SET field = REPLACE(field, 'foo', 'bar') WHERE field LIKE '%foo%';

Droga INSTR() jest drugą najszybszą i pomijanie klauzuli WHERE jest najwolniejsze, nawet jeśli kolumna nie jest indeksowana.

 0
Author: Gaspy,
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-04-05 14:07:21