MySQL pesquisa e substitui algum texto em um campo

257

Qual consulta MySQL fará uma pesquisa de texto e substituirá em um campo específico da tabela?

Ou seja, procure fooe substitua por, barpara que um registro com um campo com o valor hello foose torne hello bar.

julz
fonte

Respostas:

490

Altere table_namee fieldpara corresponder ao nome e ao campo da tabela em questão:

UPDATE table_name SET field = REPLACE(field, 'foo', 'bar') WHERE INSTR(field, 'foo') > 0;
Joe Skora
fonte
79
UPDATE [nome_tabela] SET [nome_do_campo] = SUBSTITUIR ( [field_name], "foo", "bar");
Meetai.com
6
Eu acho que é mais rápido não usar WHERE instr(field, 'foo') > 0;(por isso não faria duas pesquisas) ... Estou errado?
Inemanja
2
@treddell, nenhuma posição começa em 1 nas seqüências SQL.
Alexis Wilke
2
@inemanja, @Air sem a WHEREcláusula fizer um UPDATEem todas as linhas ...
Alexis Wilke
7
Como Pring, se você quiser deixar um comentário como esse, poderá explicar o porquê. Foi um erro no conselho original ou um erro da sua parte? E você sabe que antes de fazer alterações abrangentes em um banco de dados, você deve fazer backup primeiro?
Pdwalker
86
UPDATE table_name 
SET field = replace(field, 'string-to-find', 'string-that-will-replace-it');
thesmallprint
fonte
2
Me ajudou. Para todos os noobs, remova os colchetes.
Anantha Raju C
8
 UPDATE table SET field = replace(field, text_needs_to_be_replaced, text_required);

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

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

E se você deseja pesquisar e substituir com base no valor de outro campo, 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 outros o encontrem de uma só vez.

basdog22
fonte
Se você citar o nome do campo, use o tipo certo de aspas !
200_success 01/06
4

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

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

O INSTR()caminho é o segundo mais rápido e a omissão da WHEREcláusula é a mais lenta, mesmo que a coluna não esteja indexada.

Gaspy
fonte
Funciona para mim porque preciso adicionar outra cláusula where. UPDATE table_name SET campo = REPLACE (campo, 'foo', 'bar') WHERE campo LIKE '% foo%' AND otherfield = 'foo22'
Max
1

A função Substituir sequência fará isso.

Wayne
fonte
Funciona para mim. Depende de como você interpreta a pergunta. Se você precisar alterar as entradas do banco de dados, use update. Caso contrário, esta solução é muito melhor, pois pode ser usada sem atualizar os campos.
Gruber
0

Eu usei a linha de comando acima da seguinte forma: update TABLE-NAME set FIELD = replace (FIELD, 'And', 'and'); o objetivo era substituir E por e ("A" deve estar em minúscula). O problema é que não é possível encontrar o "E" no banco de dados, mas se eu usar como "% And%", ele pode ser encontrado junto com muitos outros ands que fazem parte de uma palavra ou mesmo os que já estão em minúsculas.

Schwann
fonte