MySQL: Sonderzeichen filtern?

solidFlex

Aktives Mitglied
Thread Starter
Dabei seit
06.06.2009
Beiträge
100
Reaktionspunkte
7
Hallo Macuser,

wie kann ich sämtliche Sonderzeichen (alles was nicht Alphanumerisch und kein Leerzeichen ist) in einem Feld bei einem SELECT filtern? Ich kann ja schlecht 500 mal hintereinander ein REPLACE() benutzen. Aber genau das ist es was mir Google die ganze Zeit anbietet. Gibt es denn keine Funktion um sämtliche nicht-Alphanumerischen Zeichen zu filtern?!? Man kann ja nicht mal REGEXP verwenden, da dies nur für Vergleiche zu gebrauchen ist.

Hier ein Beispiel, was ich brauche

Code:
mysql> SELECT TRAUMFUNKTION("a b c $ § d")
        -> "a b c   d"

Danke für Tips!

Liebe Grüsse,
sF
 
Das ist eine Interpretation der gelesenen Daten und somit nicht notwendigerweise ein Job für die DB. Ich würde das Austauschen/filtern von Zeichen der Anwendung überlassen die den String liest. Bei PHP/Perl/Ruby/... etwa würde ich eben mit regex arbeiten.
 
Hallo wegus,

danke für Deine Antwort. Wenn es nur um das Auslesen der Daten ginge, wäre das sicher die beste Lösung. Jedoch geht es bei mir im nächsten Schritt um ein GROUP BY, also inetwa SELECT TRAUMFUNKTION("a b c $ § d") as wert, COUNT(*) AS anzahl FROM _table_ GROUP BY wert ORDER BY anzahl;

Das ganze über eine Tabelle mit locker 15.000+ Einträgen. Die alle auszulesen und im Programm zu filtern erübrigt sich dann. :)

Das Hinzufügen einer weiteren Spalte in der Tabelle für eine Clean-Version des Textes habe ich natürlich schon in Betracht gezogen. Würde ich jedoch ungern machen, da es sich um eine nicht von mir entwickelte Anwendung handelt. Evtl. gibt es da Probleme mit unsauberen Queries die z.B. eine feste Tabellenstruktur beim INSERT/UPDATE benötigen. Oder Updates...wie gesagt, würde das Problem ungern so angehen, wobei das für sich genommen die performanteste Lösung sein dürfte.

Liebe Grüsse,
sF

PS: Immer diese vereinfachten Beispiele die am Ende alles noch komplizierter machen. ;)
 
solidFlex schrieb:

das würde ich dann aber nur auf eine indizierte Spalte tun, wenn das einigermaßen performant geschehen soll! Daher würde *ich* eine zusätzliche Spalte text_gefiltert anlegen, mit einer Prozedur alle Texte einmal filtern und dort ablegen. Diese Spalte würde ich indizieren und über diese dann GROUPen.

Damit machst Du die Filterarbeit nur einmal und hast das Resultat dann auch gleich indiziert.
 
Zurück
Oben Unten