Seite 1 von 4 123 ... LetzteLetzte
Ergebnis 1 bis 10 von 40

Thema: Umlaute bei Regular Expressions

  1. #1
    helmar ist offline Neuer Benutzer
    Registriert seit
    17.01.2006
    Ort
    Berlin
    Beiträge
    15

    Standard Umlaute bei Regular Expressions

    Hallo,
    wie muss ich PostgreSQL 8.1.1 konfigurieren, dass die Abfrage
    SELECT * FROM adressen WHERE name ~* 'müller';
    sowohl "Müller" als auch "MÜLLER" findet?

    Ich habe die Datenbank mit UTF8-Encoding konfiguriert und auch das local environment auf de_DE.UTF8 eingestellt; Betriebssystem ist SuSE-Linux 10.0.

    Vielen Dank für eure Hilfe,
    Helmar

  2. #2
    fristo ist offline Super-Moderator
    Registriert seit
    08.12.2005
    Ort
    Raum Frankfurt/Main
    Beiträge
    668

    Standard Re: Umlaute bei Regular Expressions

    Zitat Zitat von helmar
    Hallo,
    wie muss ich PostgreSQL 8.1.1 konfigurieren, dass die Abfrage
    SELECT * FROM adressen WHERE name ~* 'müller';
    sowohl "Müller" als auch "MÜLLER" findet?

    Ich habe die Datenbank mit UTF8-Encoding konfiguriert und auch das local environment auf de_DE.UTF8 eingestellt; Betriebssystem ist SuSE-Linux 10.0.

    Vielen Dank für eure Hilfe,
    Helmar
    Hallo Helmar,

    konfigurieren muss Du gar nichts, sondern nur den Befehle richtig schreiben. Im deutsche Manual Kapitel 9.6 "Mustervergleiche" , im englischen Manual 9.7. "Pattern Matching".

    Was die Zeichen "~*" aussagen sollen kann ich nicht deuten.

    Ansonsten heißt der Befehl: SELECT * FROM adressen WHERE upper (name) = 'MÜLLER';


    mfg

    fristo

  3. #3
    helmar ist offline Neuer Benutzer
    Registriert seit
    17.01.2006
    Ort
    Berlin
    Beiträge
    15

    Standard

    Hallo Fristo,

    ja, wenn ich auf regular expressions verzichten kann, reicht mir die WHERE-Clause mit der Funktion upper(). In meinem Fall möchte ich aber auch "Müller-Meisenpiep" und "Schwarzmüller" mit abdecken, und da fand ich den Einsatz von regular expressions sehr verlockend - zumal das englische Manual im Kapitel 9.7.3 (POSIX Regular Expressions) den Operator "~*" dafür vorschlägt (matches regular expressions, case insensitive).

    Wenn ich das alles richtig verstanden habe, wird bei diesem Vergleich auf die Zuordnung von Groß- und Kleinbuchstaben zueinander in den Funktionen im Umfeld von LC_CTYPE zurückgegrifen (englisches Manual 21.1.1). Ich meine, dass ich bei mir alles, was dort als Konfigurationsrichtlinien angegeben war, berücksichtigt habe.

    Trotzdem funktioniert's bei mir nicht - und ein Ausdruck wie
    ~* 'm(ü|Ü)ller' kostet nach meiner Erfahrung auf die Dauer ziemlich viel Rechenleistung (besonders wenn mehrere Umlaute im Suchmuster auftreten).

    Schöne Grüße,
    Helmar

  4. #4
    helmar ist offline Neuer Benutzer
    Registriert seit
    17.01.2006
    Ort
    Berlin
    Beiträge
    15

    Standard

    Nochmal zu Fristo

    ich habe inzwischen noch ein wenig herumexperimentiert. Wenn ich auf regular expressions verzichten kann, könnte ich mein Problem mit der WHERE-Clause
    WHERE upper(name) LIKE '%MÜLLER%'
    erschlagen.

    Trotzdem würde mich doch mal interessieren, warum "~*" nicht funktioniert bzw. was ich tun muss, um es zum Funktionieren zu bringen - allein schon aus der Faulheit heraus, meinen Code nicht nach diesen Operatoren durchscannen zu müssen ;-)

    Schöne Grüße,
    Helmar

  5. #5
    fristo ist offline Super-Moderator
    Registriert seit
    08.12.2005
    Ort
    Raum Frankfurt/Main
    Beiträge
    668

    Standard

    Hallo Helmar,

    Zitat Zitat von helmar
    Trotzdem würde mich doch mal interessieren, warum "~*" nicht funktioniert bzw. was ich tun muss, um es zum Funktionieren zu bringen - allein schon aus der Faulheit heraus, meinen Code nicht nach diesen Operatoren durchscannen zu müssen ;-)
    ... sondern nur den Befehl richtig schreiben! :shock: :shock: :shock:


    englische Manual im Kapitel 9.7.3 (POSIX Regular Expressions), Table 9-11. Regular Expression Match Operators, 2. Beispiel, Spalte Example

    :idea: SELECT * FROM adressen WHERE name ~* '.*müller.*'; :idea:



    Zitat Zitat von helmar
    Wenn ich auf regular expressions verzichten kann, könnte ich mein Problem mit der WHERE-Clause
    WHERE upper(name) LIKE '%MÜLLER%'
    erschlagen.
    Das wäre auch meine Antwort gewesen, wenn Du Deine Frage am Anfang vollständig formuliert hättest.

    Du kannst eine zusätzliche Spalte "name_upper" anlegen, wo die Namen alle groß geschrieben sind. Dadurch ist die Funktion upper(name) in der WHERE-Clausel nicht mehr notwendig und die Suchgeschwindigkeit wird erhöht.


    Mit dem Thema "Regular Expression" solltest Du Dich mal sehr intensiv auseinander setzen. Es sieht am Anfang sehr kompliziert aus, ist es aber nicht. Wenn man es erstmal begriffen hat, kann viele Suchprobleme auf die einfachte Art lösen!



    mfg

    fristo

  6. #6
    Crypi ist offline Erfahrener Benutzer
    Registriert seit
    28.12.2005
    Ort
    Hamburg
    Beiträge
    127

    Standard

    Moin,

    mit

    SELECT * FROM adressen WHERE name ~* '.*müller.*';

    wird er aber "MÜLLER" nicht finden.

    Oder hab ich das falsch verstanden, das er mit einer suche nach "müller" sowohl "MÜLLER" als auch "müller" finden will?

    Ich hab die erfahrung gemacht, das nur die gefunden werden wo die Umlaute übereinstimmen, also groß oder klein geschrieben sind ebenso wie das suchmuster aber nicht beide.

    Obwohl das suchen nach "upper(...)" auch für mich eine neue idee ist

    Crypi

  7. #7
    Avatar von Xandrian
    Xandrian ist offline Administrator
    Registriert seit
    23.11.2005
    Ort
    Bayreuth, Bayern, Germany, 106332342737801, Bayreuth, Germany
    Beiträge
    1.495

    Standard

    moin,

    müller <> MÜLLER <> MüLlEr ...

    aber mit dem UPPER kann man das umgehen. man kann ja auch direkt in die tabelle eine spalte UPPER(namensfeld) AS NAMEGRS oder sowas einfügen und dann geht das dynamisch und du kannst hier vergleichen.

    hat ausserdem den vorteil das die datenbank das vorbereiten kann und nicht bei jeden select neu machen muss...

    cu tb
    pg-forum.de unterstützen? Meine Wunschliste


  8. #8
    Crypi ist offline Erfahrener Benutzer
    Registriert seit
    28.12.2005
    Ort
    Hamburg
    Beiträge
    127

    Standard

    habs grad mal mit upper() ausprobiert... klapp nicht...

    WHERE
    upper(a.name) ~~* '%müller%'

    findet auch wirklich nur "müller" und nicht "MÜLLER"

    Crypi

  9. #9
    Avatar von Xandrian
    Xandrian ist offline Administrator
    Registriert seit
    23.11.2005
    Ort
    Bayreuth, Bayern, Germany, 106332342737801, Bayreuth, Germany
    Beiträge
    1.495

    Standard

    ähm klar. schau dir mal genau an was du hier machst... wenn du die spalte mit upper bearbeitest machst du alles groß. dann ist schon klar das in deinem vergleich kein müller sein darf sondern MÜLLER...

    SELECT * FROM adressen WHERE UPPER(name) ~* '.*.MÜLLER.*';

    cu tb.
    pg-forum.de unterstützen? Meine Wunschliste


  10. #10
    Crypi ist offline Erfahrener Benutzer
    Registriert seit
    28.12.2005
    Ort
    Hamburg
    Beiträge
    127

    Standard

    select upper(name) from kontakt;

    liefert

    upper
    ---------
    MÜLLER
    MüLLER


    zur info, das eine war 'MÜLLER' und das andere 'müller'

    Crypi

Seite 1 von 4 123 ... LetzteLetzte

Ähnliche Themen

  1. Problem Spezielle Strings über Regular Expressions finden?
    Von coaler24 im Forum SQL
    Antworten: 10
    Letzter Beitrag: 25.10.2011, 22:35
  2. Umlaute und Regular Expressions
    Von ___Kevin___ im Forum Konfiguration
    Antworten: 3
    Letzter Beitrag: 26.06.2009, 03:22
  3. Umlaute
    Von toni_83 im Forum SQL
    Antworten: 1
    Letzter Beitrag: 06.04.2009, 17:37
  4. Umlaute und Regular Expressions
    Von herbstra im Forum SQL
    Antworten: 4
    Letzter Beitrag: 30.05.2008, 13:19
  5. Umlaute und Performance?
    Von pantarhei im Forum Konfiguration
    Antworten: 8
    Letzter Beitrag: 30.07.2007, 18:36

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Links: Tobias Bauer - IT- und Funkdienstleistungen   -   Bilderrahmen-kaufen.de - Der Onlineshop für Bilderrahmen & Fotorahmen   -   Funkforum