Estoy buscando una determinada cadena en un campo y quiero reemplazarla con una nueva cadena. Específicamente, quiero que todas las referencias a una URL se cambien a otra URL. He creado esta declaración SQL y la estoy ejecutando en un mysql>
indicador en CentOS 5.5 usando MySQL Community Server 5.1.54.
update [table] set [field] = REPLACE([field],'%domain.com%','%domain.org%');
La respuesta es:
Query OK, 0 rows affected (0.02 sec)
Rows matched: 618 Changed: 0 Warnings: 0
¿Cómo puedo rastrear por qué no se realizan cambios?
EDITAR 1:
Gracias a Aaron Bertrand, descubrí que REPLACE()
no puede manejar comodines y lo estaba usando completamente mal (piense: WHERE
cláusula faltante ). Aquí está mi declaración reformada:
UPDATE [table]
SET [column] =
REPLACE (
[column],
'companydomain.com',
'companydomain.org' )
WHERE
[column]
LIKE
'%companydomain.com%';
A lo que recibo lo viejo y familiar:
Query OK, 0 rows affected (0.02 sec)
Rows matched: 167 Changed: 0 Warnings: 0
¿Qué podría estar haciendo mal?
EDITAR 2:
¡Te diré lo que estaba haciendo mal! No cuestionaba los supuestos. Mi suposición fue que la cadena que estaba reemplazando estaba en minúsculas. La cláusula WHERE estaba devolviendo todo lo que parecíaLIKE %companydomain.com%
. Eso incluye todas las permutaciones de capitalización como CompanyDomain.com, CoMpAnYdOmAiN.com y etc.
REPLACE()
Transmitió eso a lo que luego estaba buscando estrictamente companydomain.com para luego reemplazarlo por companydomain.org.
REPLACE (
[column],
'companydomain.com',
'companydomain.org' )
Entonces, por supuesto, mis registros fueron devueltos, pero nada fue reemplazado. Una vez que cambié REPLACE()
para tener en cuenta la capitalización, todos los registros se actualizaron y parece que todo está bien. La REPLACE()
sintaxis correcta para mi escenario era así:
REPLACE (
[column],
'CompanyDomain.com',
'companydomain.org' )