Respostas:
Altere table_name
e field
para 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;
WHERE instr(field, 'foo') > 0;
(por isso não faria duas pesquisas) ... Estou errado?
WHERE
cláusula fizer um UPDATE
em todas as linhas ...
UPDATE table_name
SET field = replace(field, 'string-to-find', 'string-that-will-replace-it');
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');
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.
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 WHERE
cláusula é a mais lenta, mesmo que a coluna não esteja indexada.
A função Substituir sequência fará isso.
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.
[field_name]
, "foo", "bar");