Estou procurando uma determinada string em um campo e quero substituí-la por uma nova string. Especificamente, desejo que todas as referências a um URL sejam alteradas para outro URL. Criei esta 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?
EDIÇÃO 1:
Graças a Aaron Bertrand, descobri que REPLACE()
não consigo lidar com curingas e estava usando completamente errado (pense: WHERE
cláusula ausente). Aqui está minha declaração reformada:
UPDATE [table]
SET [column] =
REPLACE (
[column],
'companydomain.com',
'companydomain.org' )
WHERE
[column]
LIKE
'%companydomain.com%';
Ao qual recebo o velho e familiar:
Query OK, 0 rows affected (0.02 sec)
Rows matched: 167 Changed: 0 Warnings: 0
O que eu poderia estar fazendo de errado?
EDIÇÃO 2:
Vou te dizer o que eu estava fazendo de errado!! Eu não estava questionando suposições. Minha suposição era que a string que eu estava substituindo estava toda 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 para REPLACE()
quem então procurava estritamente por companydomain.com para substituí-lo por companydomain.org.
REPLACE (
[column],
'companydomain.com',
'companydomain.org' )
Então é claro que meus registros estavam sendo devolvidos, mas nada estava sendo substituído. Depois que mudei REPLACE()
para levar em consideração a capitalização, todos os registros foram atualizados e parece que está tudo bem. REPLACE()
A sintaxe correta para o meu cenário foi assim:
REPLACE (
[column],
'CompanyDomain.com',
'companydomain.org' )
REPLACE
não joga com curingas dessa forma. Acho que você quis dizer:Você não tem
WHERE
cláusula, então ele tentou atualizar 618 linhas, mas não encontrou nenhuma instância de%TLD.com%
nessa coluna. Para ver quais linhas devem ser afetadas, execute umSELECT
:Primeiro, temos que verificar usando uma
select
consulta:Em seguida, temos que atualizar:
Resultados:
Cloud & Enterprise Computing
⇒Cloud & Enterprise Computing
Finalmente, temos que aplicar para todos:
Resultados:
Corporate & Insolvency Law
⇒Corporate & Insolvency Law