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.

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;

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');

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');

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.


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.


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.


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.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.