8
votes

Remplacez toutes les occurrences d'une sous-chaîne dans un champ de texte de base de données

J'ai une base de données d'environ 10 000 enregistrements et certains d'entre eux contiennent des caractères HTML que je voudrais remplacer.

Par exemple, je peux trouver toutes les occurrences: P>

SELECT * FROM TABLE
WHERE TEXTFIELD LIKE '%&#47%'


4 commentaires

en utilisant une déclaration de mise à jour. Si vous avez déjà un choix de travail, son TSQL 101 pour écrire la mise à jour.


@Mitchwhate Tsql? Ceci est une base de données PostgreSQL.


SQL: Je pense que vous savez ce que je voulais dire.


Dupliqué possible de PostgreSQL - Remplacez toutes les instances d'une chaîne dans Champ de texte


3 Réponses :


21
votes

Si vous souhaitez remplacer une chaîne spécifique d'une autre chaîne ou de transformation de cette chaîne, vous pouvez utiliser la fonction "Remplacer" dans PostgreSQL. Par exemple, pour remplacer toutes les occurrences de "CAT" avec "chien" dans la colonne "MyField", vous feriez:

UPDATE tablename
SET myfield = replace(myfield,"cat", "dog")


0 commentaires

4
votes

La réponse donnée par @davesnitty fonctionnera, mais vous devez penser très attentivement si le modèle de texte que vous remplacera peut sembler intégré dans un modèle plus long que vous ne souhaitez pas modifier. Sinon, vous trouverez que quelqu'un nooking un feu , et c'est juste bizarre.

Si possible, utilisez un outil dédié approprié pour ce que vous êtes impressionnant. J'ai eu du texte d'urlencode? Utilisez un décodeur d'URL. Obtenu des entités XML? Traitez-les bien qu'une feuille de style XSLT en mode texte Sortie. etc. Celles-ci sont généralement plus sûres pour vos données que de le pirater avec Recherche et remplacement, dans cette recherche et remplacement, ont souvent des effets secondaires malheureux s'il n'est pas appliqué très soigneusement, comme indiqué ci-dessus.

Il est possible Vous pouvez aimer que utiliser un expression régulière . Ils sont Pas une solution universelle à Tous les problèmes mais sont vraiment utiles pour certains emplois.

Si vous voulez remplacer inconditionnellement toutes les instances de "& # 47" avec "/", vous n'avez pas besoin d'une régexp.

Si vous voulez remplacer "& # 47" mais pas "& # 471", vous pourriez avoir besoin d'une réégyvabilité, car vous pouvez faire des choses telles que des mots entiers, assortir divers modèles, spécifier min / max des chiffres de chiffres, c.

dans le Fonctions de chaîne PostgreSQL et opérateurs Documentation Vous ' ll Trouver la fonction regexp_replace , qui vous permettra d'appliquer une réégyvance lors d'une instruction update .

Pour pouvoir dire beaucoup plus, j'avais besoin de savoir quelles sont vos vraies données et ce que vous essayez vraiment de faire.


1 commentaires

J'ai adoré le lien "nooking un feu" !!



0
votes

Si vous n'avez pas de postgres, vous pouvez exporter toutes les bases de données vers un fichier SQL, remplacer votre chaîne avec un éditeur de texte et supprimer votre DB sur votre hôte et ré-importer votre nouveau DB

PS: soyez prudent


0 commentaires