it-swarm-pt.tech

MySQL pesquisa e substituir algum texto em um campo

O que a consulta MySQL fará uma pesquisa de texto e substituirá em um campo específico de uma tabela?

Ou seja procure por foo e substitua por bar, para que um registro com um campo com o valor hello foo se torne hello bar.

231
julz

Altere table_name e field para corresponder ao nome da sua tabela e ao campo em questão:

UPDATE table_name SET field = REPLACE(field, 'foo', 'bar') WHERE INSTR(field, 'foo') > 0;
443
Joe Skora
UPDATE table_name 
SET field = replace(field, 'string-to-find', 'string-that-will-replace-it');
79
thesmallprint
 UPDATE table SET field = replace(field, text_needs_to_be_replaced, text_required);

Como por exemplo, se eu quiser substituir todas as ocorrências de John por Mark eu usarei abaixo, 

UPDATE student SET student_name = replace(student_name, 'John', 'Mark');
6
Umesh Patil

E se você quiser pesquisar e substituir com base no valor de outro campo, você pode fazer um CONCAT:

update table_name set `field_name` = replace(`field_name`,'YOUR_OLD_STRING',CONCAT('NEW_STRING',`OTHER_FIELD_VALUE`,'AFTER_IF_NEEDED'));

Só para ter este aqui para que os outros o encontrem imediatamente.

5
basdog22

A função Replace string fará isso.

1
Wayne

Eu usei a linha de comando acima como segue: Update TABLE-NAME set FIELD = substituir (FIELD, 'And', 'and'); O objetivo era substituir And por e ("A "deve estar em minúsculas). O problema é que ele não pode encontrar o "E" no banco de dados, mas se eu usar como "% E%", então ele pode encontrá-lo junto com muitos outros que fazem parte de um Word ou até mesmo aqueles que já estão em minúsculas.

0
Schwann

Na minha experiência, o método mais rápido é

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

A maneira INSTR() é a segunda mais rápida e a omissão da cláusula WHERE é mais lenta, mesmo que a coluna não esteja indexada.

0
Gaspy