2010-12-13 8 views
18

In einer Tabellenspalte in string können wir Nummern/Sonderzeichen/Leerzeichen haben. Ich möchte Zahlen/Sonderzeichen/Leerraum durch leere Char ersetzen, ich sehe, es gibt eine Funktion mit dem Namen regexp_replace, aber wie Sie nicht viel benutzerfreundliche Hilfe avaialble verwenden, zum Beispiel möchte ich folgende Zeichenfolge verwenden.postgres regexp_replace möchte nur a-z und A-Z erlauben

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

Ich möchte alle Sonderzeichen und Zahlen von oben Zeichenfolge entfernen möchten nur a-z und A-Z Rest von Zeichen zu ermöglichen, sollte mit '', wie man das ersetzt werden?

Antwort

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

Sollte sein:

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

es wird nicht funktionieren Versuch von yoursef REGEXP_REPLACE wählen (‚abc123‘, ‚a-Za Z ',' ') –

+0

Sorry, ich habe die Klammern verpasst, und leider kann ich es im Moment nicht testen – Pit

7

es einfacher zu machen:

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

das funktioniert, obwohl aus irgendeinem Grund scheint nicht zu sein [die Dokumente] (http://www.postgresql.org/ docs/9.3/static/functions-matching.html # POSIX-KLASSE-KURZHAND-ESCAPES-TABELLE) –

+4

'select regexp_replace ('abc $ willo & toremove # spezial ~ zeichen', '[^ [: alpha:]]', '' , 'g') ' –

3

Für mich ist die gearbeitet folgen.

regexp_replace(code, '[^a-zA-Z0-9]+', '','g')  

Da es globalen Filter hinzugefügt, so wiederholt es die Regex für die gesamte Zeichenfolge.

Beispiel,

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

Rückkehr: "WellThis Hat-Not & * ($ %%) arbeiten _"

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

Rückkehr: "WellThisDidNotwork"

, die die Zeichen hat wir wollen nicht entfernt werden.

+0

was ist die Verwendung von g in oben genannten Ausdruck kann Sie sagen mir bitte –

+0

Es ist ein globaler Modifikator. "g ist für die globale Suche. Dies bedeutet, dass alle Vorkommen übereinstimmen." Hier erklärt: https://stackoverflow.com/questions/12993629/what-is-the-meaning-of-the-g--flag- In-Regular-Ausdrücke –

+0

Danke. War auf der Suche nach etwas, um Whitespace zu entfernen, konnte es jedoch nicht durch Angabe der Whitespace-Typen erreichen. Eine umgekehrte Übereinstimmung mit alphanumerischen Zeichen ist viel einfacher (solange Sie keine Sonderzeichen haben, die Sie behalten möchten). – otocan

3

Wenn Sie das Zeichen mit dem nächsten nicht spezielle Zeichen ersetzen möchten, können Sie etwas tun:

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