Nous avons une base de données qui contient une série d'enregistrements avec certaines données incorrectes dans une colonne, dans laquelle un éditeur intégré échappe à des éléments qui n'auraient pas dû être ignorés et rompent les liens générés.
Je veux lancer une requête pour remplacer les caractères incorrects dans tous les enregistrements, mais je ne vois pas comment le faire. J'ai trouvé la fonction replace()
_ dans MySQL, mais comment puis-je l'utiliser dans une requête?
Par exemple, quelle serait la syntaxe correcte si je souhaitais remplacer la chaîne <
par un crochet inférieur à l'angle réel (<
) dans tous les enregistrements comportant <
dans le articleItem
colonne? Peut-on le faire en une seule requête (c'est-à-dire tout sélectionner et tout remplacer d'un coup) ou dois-je faire plusieurs requêtes? Même s'il s'agit de plusieurs requêtes, comment utiliser replace()
pour remplacer la valeur d'un champ dans plusieurs enregistrements?
À un niveau très générique
UPDATE MyTable
SET StringColumn = REPLACE (StringColumn, 'SearchForThis', 'ReplaceWithThis')
WHERE SomeOtherColumn LIKE '%PATTERN%'
Dans votre cas, vous dites que ceux-ci ont été échappés, mais puisque vous ne précisez pas comment ils ont été échappés, supposons qu'ils se soient échappés GREATERTHAN
UPDATE MyTable
SET StringColumn = REPLACE (StringColumn, 'GREATERTHAN', '>')
WHERE articleItem LIKE '%GREATERTHAN%'
Etant donné que votre requête va réellement fonctionner à l'intérieur de la chaîne, votre clause WHERE
faisant sa correspondance de modèle est peu susceptible d'améliorer les performances - elle va en réalité générer plus de travail pour le serveur. Sauf si vous avez un autre membre de la clause WHERE qui améliorera cette requête, vous pouvez simplement faire une mise à jour comme celle-ci:
UPDATE MyTable
SET StringColumn = REPLACE (StringColumn, 'GREATERTHAN', '>')
Vous pouvez également imbriquer plusieurs appels REPLACE
UPDATE MyTable
SET StringColumn = REPLACE (REPLACE (StringColumn, 'GREATERTHAN', '>'), 'LESSTHAN', '<')
Vous pouvez également le faire lorsque vous sélectionnez les données (et non lorsque vous les enregistrez).
Donc au lieu de:
SELECT MyURLString From MyTable
Vous pourriez faire
SELECT REPLACE (MyURLString, 'GREATERTHAN', '>') as MyURLString From MyTable
UPDATE some_table SET some_field = REPLACE(some_field, '<', '<')
Vérifie ça
UPDATE some_table SET some_field = REPLACE("Column Name/String", 'Search String', 'Replace String')
Exemple avec exemple de chaîne:
UPDATE some_table SET some_field = REPLACE("this is test string", 'test', 'sample')
EG avec nom de colonne/champ:
UPDATE some_table SET some_field = REPLACE(columnName, 'test', 'sample')
vous pouvez écrire une procédure stockée comme ceci:
CREATE PROCEDURE désinfecter _TABLE ()
COMMENCER
# remplace l'espace par un trait de soulignement
UPDATE Table SET Nom du champ = REPLACE ( Nom du champ , "", "_") O FieldName n'est pas NULL;
# effacer un point
UPDATE Table SET Nom du champ = REPLACE ( Nom du champ , ".", "") O FieldName n'est pas NULL;
# delete (
UPDATE Table SET Nom du champ = REPLACE ( Nom du champ , "(", "") O FieldName n'est pas NULL;
# delete)
UPDATE Table SET Nom du champ = REPLACE ( Nom du champ , ")", "") O FieldName n'est pas NULL;
# raplace ou supprime le caractère que tu veux
# ..........................
FIN
De cette façon, vous avez un contrôle modularisé sur la table.
Vous pouvez également généraliser la procédure stockée en la rendant paramétrique avec le paramètre d’entrée table à sanitoze