2010-12-13 32 views
18

Dans une colonne de table dans une chaîne, nous pouvons avoir des nombres/caractères spéciaux/espaces blancs. Je veux remplacer les chiffres/caractères spéciaux/espace blanc avec char vide, je vois qu'il ya une fonction nommée regexp_replace mais comment utiliser pas beaucoup d'aide conviviale avaialble par exemple je veux utiliser la chaîne suivante.postgres regexp_replace ne veut autoriser que a-z et A-Z

String = 'abc$wanto&toremove#special~chars' 

Je veux supprimer tous les caractères spéciaux et les numéros de chaîne ci-dessus veulent permettre que a-z et A-Z reste de caractères doit être remplacé par '' comment faire?

Répondre

43
select regexp_replace('abc$wanto&toremove#special~chars', '[^a-zA-Z]', '', 'g') 
0

devrait être:

regexp_replace('abc$wanto&toremove#special~chars', '[^a-zA-Z]+', '') 
+0

ESSAYEZ coutume de travail par yoursef sélectionner regexp_replace (« abc123 », « a-Za Z ',' ') –

+0

Désolé j'ai manqué les parenthèses, et malheureusement je ne peux pas le tester pour l'instant – Pit

7

Pour le rendre plus simple:

regexp_replace('abc$wanto&toremove#special~chars', '[^[:alpha:]]') 
+1

cela fonctionne, bien que pour une raison quelconque semble être absent de [les docs] (http://www.postgresql.org/ docs/9.3/static/functions-matching.html # POSIX-CLASS-SHORTHAND-ESCAPES-TABLE) –

+4

'select regexp_replace ('abc $ vouloir & toremove # special ~ caractères', '[[[alpha:]]', '' , 'g') ' –

3

Pour moi qui suit travaillé. Comme il ajoute un filtre global, il répète l'expression rationnelle pour la chaîne entière.

Exemple,

SELECT regexp_replace('Well- This Did-Not work&*($%%)_', '[^a-zA-Z0-9]+', '')  

Retours: "Est-ce que WellThis-& fonctionne pas * (%% $) _"

SELECT regexp_replace('Well- This Did-Not work&*($%%)_', '[^a-zA-Z0-9]+', '','g')  

Retours: "WellThisDidNotwork"

qui a les caractères nous ne voulons pas supprimé.

+0

quelle est l'utilisation de g dans l'expression ci-dessus peut vous me dites –

+0

C'est un modificateur global. "g est pour la recherche globale, ce qui signifie qu'elle correspond à toutes les occurrences." Expliquée ici: https://stackoverflow.com/questions/12993629/what-is-the-meaning-of-the-g-flag- expressions in-regular –

+0

Merci. Était à la recherche de quelque chose pour supprimer les espaces, mais ne pouvait pas l'accomplir en spécifiant les types d'espaces. Utiliser une correspondance inversée contre des caractères alphanumériques est beaucoup plus facile (tant que vous n'avez pas de caractères spéciaux que vous souhaitez conserver). – otocan

3

Si vous voulez remplacer le charbon le plus proche ombles pas spécial, vous pouvez faire quelque chose comme ceci:

select 
    translate(
    lower(name), ' ''àáâãäéèëêíìïîóòõöôúùüûçÇ', '--aaaaaeeeeiiiiooooouuuucc' 
) as new_name, 
    name 
from cities;