2016-04-09 9 views
-2

Wie lösche ich alle Zeichen aus einer Zeichenfolge, die nicht in der angegebenen Zeichenliste enthalten sind?Verwenden von Postgres regexp_replace zum Löschen aller Zeichen, die sich nicht in einer angegebenen Liste befinden, aus einer Zeichenfolge

Zum Beispiel: Liste der „gültig“ Zeichen ist 2,n,w,s

String verarbeitet werden '24nQ/m' und Ergebnis sollte '2n'

+1

eine negierte Zeichenklasse verwenden. Vergessen Sie nicht, das Flag "g" zu übergeben, um alle Vorkommen zu ersetzen. –

+1

Ich sehe nicht, warum das eine zu breite Frage wäre. Es ist klar formuliert und wir haben zwei gültige Antworten dafür gesehen. – sal

Antwort

1

Sie sein regex_replace nutzen könnten andere Zeichen mit leeren String ersetzt werden:

SELECT *, 
     regexp_replace(col, '[^2nws]','','g') AS replaced 
FROM tab; 

SqlFiddleDemo

Ausgang:

╔═══════════╦══════════╗ 
║ col  ║ replaced ║ 
╠═══════════╬══════════╣ 
║ 24nQ/m ║ 2n  ║ 
║ 2444nQ/m ║ 2n  ║ 
║ aaa  ║   ║ 
║ Nn  ║ n  ║ 
╚═══════════╩══════════╝ 

Wenn Sie 'gi' Flagge Fall Gebrauch zu ignorieren.


Ein anderer Weg ist translate Funktion zu verwenden:

SELECT *, 
     translate(col, translate(col, '2nws','^'),'') AS replaced 
FROM tab; 

SqlFiddleDemo2

Verwandte Themen