MySQL pesquisa e substitui algum texto em um campo
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.
Altere table_namee fieldpara corresponder ao nome e ao campo da tabela em questão:
REPLACE (funções de string)
INSTR (funções de string)
UPDATE [nome_tabela] SET [nome_do_campo] = SUBSTITUIR ( [field_name], "foo", "bar");
Eu acho que é mais rápido não usar WHERE instr(field, 'foo') > 0;(por isso não faria duas pesquisas) ... Estou errado?
@treddell, nenhuma posição começa em 1 nas seqüências SQL.
@inemanja, @Air sem a WHEREcláusula fizer um UPDATEem todas as linhas ...
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?
Me ajudou. Para todos os noobs, remova os colchetes.
Por exemplo, se eu quiser substituir todas as ocorrências de John por Mark, usarei abaixo,
E se você deseja pesquisar e substituir com base no valor de outro campo, pode fazer um CONCAT:
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
Na minha experiência, o método mais rápido é
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'
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.
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.