2012-06-12 2 views
3

J'ai une base de données qui contient environ 10 000 enregistrements et certains d'entre eux contiennent des caractères HTML que je souhaite remplacer.Remplacer toutes les occurrences d'une sous-chaîne dans un champ de texte de base de données

Par exemple, je peux trouver toutes les occurrences:

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

l'exemple de chaîne d'origine:

this is the cool mega string that contains &#47

comment remplacer tous les &#47 avec /?

Le résultat final devrait être:

this is the cool mega string that contains /

+1

en utilisant une instruction de mise à jour. Si vous avez déjà un travail de sélection alors son TSQL 101 pour écrire la mise à jour. –

+0

@MitchWheat TSQL? C'est une base de données PostgreSQL. –

+0

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

Répondre

12

Si vous souhaitez remplacer une chaîne spécifique par une autre chaîne ou la transformation de cette chaîne, vous pouvez utiliser la fonction « remplacer » dans postgresql. Par exemple, pour remplacer toutes les occurences de « chat » avec « chien » dans la colonne « myfield », vous feriez:

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

Vous pouvez ajouter une clause WHERE ou tout autre logique que bon vous semble. Alternativement, si vous essayez de convertir des entités HTML, des caractères ASCII ou différents schémas de codage, postgre a aussi des fonctions pour cela. Postgresql String Functions.

3

La réponse donnée par @davesnitty fonctionnera, mais vous devez réfléchir très sérieusement à la possibilité d'incorporer le motif de texte que vous remplacez dans un motif plus long que vous ne voulez pas modifier. Sinon, vous trouverez quelqu'un nooking a fire, et c'est juste bizarre.

Si possible, utilisez un outil dédié approprié pour ce que vous vous échappez. Vous avez du texte URLEncoded? utilisez un décodeur d'URL. Vous avez des entités XML? Traitez-les via une feuille de style XSLT en sortie de texte. etc. Ceux-ci sont généralement plus sûrs pour vos données que le piratage avec trouver-et-remplacer, en ce que trouver et remplacer a souvent des effets secondaires malheureux si elle n'est pas appliquée très soigneusement, comme indiqué ci-dessus.

Il est possible you may want d'utiliser un regular expression. Ils sont not a universal solution to all problems mais sont vraiment pratiques pour certains travaux.

Si vous souhaitez remplacer inconditionnellement toutes les instances de "& # 47" par "/", vous n'avez pas besoin d'une expression rationnelle.

Si vous voulez remplacer « & # 47 » mais pas « & # 471 », vous pourriez avoir besoin d'une expression rationnelle, parce que vous pouvez faire des choses comme correspondance que des mots entiers, correspondre à divers motifs, spécifier min/max court de chiffres

Dans la documentation PostgreSQL string functions and operators, vous trouverez la fonction , qui vous permettra d'appliquer une expression rationnelle lors d'une instruction UPDATE. Pour pouvoir en dire plus, j'ai besoin de savoir quelles sont vos données réelles et ce que vous essayez vraiment de faire.

+3

a aimé le lien «coinçant un feu»! –

Questions connexes