Je cherche une certaine chaîne dans un champ et je veux la remplacer par une nouvelle chaîne. Plus précisément, je souhaite que toutes les références à une URL soient remplacées par une autre URL. J'ai conçu cette instruction SQL et je l'exécute à l' mysql>
invite sur CentOS 5.5 à l'aide de MySQL Community Server 5.1.54.
update [table] set [field] = REPLACE([field],'%domain.com%','%domain.org%');
La réponse est:
Query OK, 0 rows affected (0.02 sec)
Rows matched: 618 Changed: 0 Warnings: 0
Comment savoir pourquoi aucune modification n'est apportée?
EDIT 1:
Grâce à Aaron Bertrand, j'ai découvert que je REPLACE()
ne peux pas gérer les caractères génériques et je l'utilisais complètement mal (pensez: WHERE
clause manquante ). Voici ma déclaration réformée:
UPDATE [table]
SET [column] =
REPLACE (
[column],
'companydomain.com',
'companydomain.org' )
WHERE
[column]
LIKE
'%companydomain.com%';
À qui je reçois l'ancien, familier:
Query OK, 0 rows affected (0.02 sec)
Rows matched: 167 Changed: 0 Warnings: 0
Que pourrais-je faire de mal?
EDIT 2:
Je vais vous dire ce que je faisais mal !! Je ne remettais pas en question les hypothèses. Mon hypothèse était que la chaîne que je remplaçais était en minuscules. La clause WHERE renvoyait tout ce qui semblaitLIKE %companydomain.com%
. Cela inclut toutes les permutations de capitalisation telles que CompanyDomain.com, CoMpAnYdOmAiN.com, etc.
Il a transmis ce REPLACE()
qui cherchait alors strictement companydomain.com pour le remplacer par companydomain.org.
REPLACE (
[column],
'companydomain.com',
'companydomain.org' )
Alors bien sûr, mes dossiers étaient retournés, mais rien n'était remplacé. Une fois que j'ai changé REPLACE()
pour tenir compte de la capitalisation, tous les enregistrements ont été mis à jour et il semble que tout va bien. La REPLACE()
syntaxe correcte pour mon scénario était donc:
REPLACE (
[column],
'CompanyDomain.com',
'companydomain.org' )