Estou procurando uma determinada string em um campo e quero substituí-la por uma nova. Especificamente, desejo que todas as referências a um URL sejam alteradas para outro URL. Eu criei essa instrução SQL e a estou executando em um mysql>
prompt no CentOS 5.5 usando o MySQL Community Server 5.1.54.
update [table] set [field] = REPLACE([field],'%domain.com%','%domain.org%');
A resposta é:
Query OK, 0 rows affected (0.02 sec)
Rows matched: 618 Changed: 0 Warnings: 0
Como posso rastrear por que nenhuma alteração está sendo feita?
EDIT 1:
Graças a Aaron Bertrand, descobri que REPLACE()
não pode lidar com curingas e estava usando-o completamente errado (pense: WHERE
cláusula ausente ). Aqui está a minha declaração reformada:
UPDATE [table]
SET [column] =
REPLACE (
[column],
'companydomain.com',
'companydomain.org' )
WHERE
[column]
LIKE
'%companydomain.com%';
Ao qual recebo o velho, familiar:
Query OK, 0 rows affected (0.02 sec)
Rows matched: 167 Changed: 0 Warnings: 0
O que eu poderia estar fazendo de errado?
EDIT 2:
Vou te contar o que estava fazendo de errado !! Eu não estava questionando suposições. Minha suposição era que a string que eu estava substituindo estava em letras minúsculas. A cláusula WHERE estava retornando todas as coisas que pareciamLIKE %companydomain.com%
. Isso inclui todas as permutações de capitalização, como CompanyDomain.com, CoMpAnYdOmAiN.com e etc.
Ele passou aquilo para o REPLACE()
qual, então, procurava estritamente o companydomain.com para substituí-lo pelo companydomain.org.
REPLACE (
[column],
'companydomain.com',
'companydomain.org' )
É claro que meus registros estavam sendo devolvidos, mas nada estava sendo substituído. Depois que mudei REPLACE()
para levar em conta a capitalização, todos os registros foram atualizados e parece que tudo está bem. A REPLACE()
sintaxe correta para o meu cenário foi assim:
REPLACE (
[column],
'CompanyDomain.com',
'companydomain.org' )