Sto cercando una determinata stringa in un campo e voglio sostituirla con una nuova stringa. In particolare, desidero che tutti i riferimenti a un URL vengano cambiati in un altro URL. Ho creato questa istruzione SQL e la sto eseguendo su un mysql>
prompt su CentOS 5.5 utilizzando MySQL Community Server 5.1.54.
update [table] set [field] = REPLACE([field],'%domain.com%','%domain.org%');
La risposta è:
Query OK, 0 rows affected (0.02 sec)
Rows matched: 618 Changed: 0 Warnings: 0
Come posso rintracciare perché non vengono apportate modifiche?
MODIFICA 1:
Grazie ad Aaron Bertrand, ho scoperto che REPLACE()
non è in grado di gestire i caratteri jolly e lo stavo usando in modo completamente sbagliato (pensa: WHERE
clausola mancante ). Ecco la mia dichiarazione riformata:
UPDATE [table]
SET [column] =
REPLACE (
[column],
'companydomain.com',
'companydomain.org' )
WHERE
[column]
LIKE
'%companydomain.com%';
A cui ricevo il vecchio, familiare:
Query OK, 0 rows affected (0.02 sec)
Rows matched: 167 Changed: 0 Warnings: 0
Cosa potrei fare di sbagliato?
MODIFICA 2:
Ti dirò cosa stavo facendo di sbagliato !! Non mettevo in discussione ipotesi. La mia ipotesi era che la stringa che stavo sostituendo fosse in tutte le lettere minuscole. La clausola WHERE stava restituendo tutte le cose che sembravanoLIKE %companydomain.com%
. Ciò include tutte le permutazioni di capitalizzazione come CompanyDomain.com, CoMpAnYdOmAiN.com ed ecc.
Passò quello a REPLACE()
cui poi cercava rigorosamente companydomain.com per sostituirlo con companydomain.org.
REPLACE (
[column],
'companydomain.com',
'companydomain.org' )
Quindi ovviamente i miei dischi venivano restituiti, ma nulla veniva sostituito. Una volta modificato REPLACE()
per tenere conto della capitalizzazione, tutti i record sono stati aggiornati e sembra che tutto vada bene. La REPLACE()
sintassi corretta per il mio scenario era quindi:
REPLACE (
[column],
'CompanyDomain.com',
'companydomain.org' )