Seite 4 von 4 ErsteErste ... 234
Ergebnis 31 bis 40 von 40

Thema: Umlaute bei Regular Expressions

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

    Standard

    Hallo Crypi,

    Zitat Zitat von Crypi
    SELECT 'XXXMÜLLERYyyy' ~* '.*müller.*';

    so wie ich das verstanden habe, bitte korrigiert mich wenn ich daneben liege, hängt das mit den LC_CTYPE einstellungen von postgres zusammen ob es geht oder nicht...
    Eindeutig nein!



    :!: Das nachfolgend geschriebene ist keine Garantie, das die beschriebenen Eigenschaften auch so in PostgreSQL z.Z. implemetiert sind. Der kleine Unterschied, zwischen Theorie und Praxis, zum besseren Verständnis! (Doku ist maßgebend) :!:

    Locale definieren Sprachen und Formate.

    PostgreSQL kennt derzeit die folgenden Locale: LC_MESSAGES, LC_MONETARY, LC_NUMERIC und LC_TIME.

    LC_MESSAGES definiert die (Landes-) Sprache, in der Mitteilungen ausgegeben werden.
    LC_MONETARY definiert die Formatierung von Geldbeträgen.
    LC_NUMERIC definiert die Formatierung von Zahlen.
    LC_TIME definiert die Formatierung von Datums- und Zeitwerten.

    Diese Locale gelten für den Server und bedeuten bezüglich LC_MONETARY, LC_NUMERIC und LC_TIME, dass der Server beim Import von Daten, für die jeweils zugehörigen Daten-Typen, die definierten Formate erwartet und beim Export die entsprenden definierten Formate liefert.

    Da die Locale von PostgreSQL in einer eigenen Datei stehen, sind sie unabhängig vom Betriebssystem. Rein theoretisch könnte man die Werte so definieren, dass die Mitteilungen in chinesisch ausgeben werden, die Formatierung von Datums- und Zeitwerten dem deutschem Format und die Formatierung von Zahlen dem US-Format entspricht.



    Worüber wir hier reden ist Abhängigkeit vom Zeichensatz, den die Datenbank intern verwendet und mittels 'encoding' definiert wird. Dieser ist nicht zu verwechseln mit dem Zeichensatz des Clients, der mittels 'client_encoding' vorgegeben wird und in dem der Datentransfer zwischen Client und Server erfolgt. Sind der Zeichensatz von Client und Datenbank nicht gleich, so wird intern (Datenbank) eine Konvertierungs-Funktion aufgerufen. Siehe Convert-Funktion in der Doku.

    Bei den Zeichensätzen muss man nun unterscheiden zwischen den Ein-Byte- und den Multi-Byte-Zeichensätzen. Ein Ein-Byte-Zeichensatz sind z.B. die Zeichensätze latin... . Der bekannteste Multi-Byte-Zeichensatz ist Unicode. Unicode verwendet für ein Zeichen zwische 1-4 Byte. Außer den ASCII-Zeichen (0x00 - 0x7F) haben alle andere Zeichen 2, 3 oder 4 Byte.

    Wenn hier die Bezeichnung UTF-8 genannt wird, ist immer Unicode gemeint. UTF-8 selbst ist auch keine Zeichensatz sondern Kodierungsart für Unicode-Zeichen.



    So, nun kanst Du dir mal Überlegen, warum ein Test mit "Miller" immer und mit "Müller" nicht immer funktioniert.



    In der Table 21.1. "Server Character Sets" im englischen Manual kannst Du die notwendigen Bytes für die einzelnen Zeichensätze nachlesen.

    Eine Beschreibung über die UTF-8 Kodierung kannst Du hier finden: http://de.wikipedia.org/wiki/UTF8.

    Einen UTF Converter gibt es hier: http://www.macchiato.com/unicode/convert.html.

    Und zu Zeichen-Tabellen habe ich hier auch noch ein Link: http://www.gymel.com/charsets



    mfg

    fristo

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

    Standard

    Hallo Crypi,

    ich hab' noch was vergessen.

    So ein Funktionstest

    Code:
    SELECT 'XXXMÜLLERYyyy' ~* '.*müller.*';
    schließt die Fehler bei den eigenen Daten aus. Den besten Beweis hast Du selbst geliefert:

    Zitat Zitat von Crypi
    select upper(name) from kontakt;

    liefert

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


    zur info, das eine war 'MÜLLER' und das andere 'müller'
    Bei dem Ergebnis des Test's upper(name) wo name = 'müller' würden bei mir die Alarmglocken :idea: :idea: :idea: schellen!


    mfg

    fristo

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

    Standard

    Hallo helmar,

    Zitat Zitat von helmar
    Hallo Fristo,
    sorry, der Bugreport ist schon weg :-(

    Und zu deiner Fehlermeldung: Ähnliches kenne ich auch aus der Zeit, als wir von Latin-1 auf UTF-8 umgestellt hatten. Ich gehe mal davon aus, dass du dem Server gesagt hast, dass dein Client auf Latin-1 läuft (set client_encoding to 'latin1'). Dann hast du aber trotzdem Schwierigkeiten, wenn Zeichen an den Client weitergegeben werden sollen, die in Latin-1 nicht vorhanden sind (denke da z.B. an das Euro-Zeichen).

    Aber was war denn das für eine Fehlermeldung im einzelnen?

    Gruß,
    Helmar
    war ein Fehlarlarm. Der Test ergab keinerlei Probleme.

    Das einzige Zeichen welches unter Windows z.Z eine Sonderstellung hat ist das -Zeichen. Dieses hat den Code 0x7f. Wenn man beim Importieren die Konvertierung vergessen hat, ist das kein Datenverlust. Die Konvertierung kann man dann ja noch nachholen. Allerdings wird das -Zeichen ohne Konvertierung immer als Blank dargestellt.



    mfg

    fristo

  4. #34
    DecKeL ist offline Neuer Benutzer
    Registriert seit
    21.03.2007
    Beiträge
    4

    Standard

    Hey Leute,

    Ich habe eine Datenbank mit Tel. Nummer.
    Diese Nummern sehen z.B so aus: '0261/9372-0asdf'
    jetzt will ich eine Abfrage machen, die nur die ziffern berücksichtig und alles andere nicht.
    Ich suche jetzt z.B nach '02619372' und will dass ich dann z.b das oben genannte Feld zuückgeliefert bekomme.
    Kann mir da jemad helfen???

    cu Manu

  5. #35
    ads
    ads ist offline Super-Moderator
    Registriert seit
    08.02.2006
    Ort
    MD
    Beiträge
    4.056

    Standard

    Könntest du für dein Problem einen eigenen Thread das nächste Mal aufmachen? ;-)

    Im Normalfall ist dein Problem eine Aufgabe für die Normalisierung, wobei man die Daten gleich passend für die Suche aufbereiten und ablegen könnte. Ansonsten musst du wohl mit Text Ersetzungsfunktionen herangehen und alles herausschneiden, was dich interessiert.

    http://www.postgresql.org/docs/8.2/i...ns-string.html
    Xandrian: Kurz gesagt: Du hast ein falsches Konzept und willst nicht auf ads hören

    Jetzt NEU: PostgreSQL - Datenbankpraxis für Anwender, Administratoren und Entwickler

    PostgreSQL Service & Support

  6. #36
    DecKeL ist offline Neuer Benutzer
    Registriert seit
    21.03.2007
    Beiträge
    4

    Standard

    Zitat Zitat von ads Beitrag anzeigen
    Könntest du für dein Problem einen eigenen Thread das nächste Mal aufmachen? ;-)

    Im Normalfall ist dein Problem eine Aufgabe für die Normalisierung, wobei man die Daten gleich passend für die Suche aufbereiten und ablegen könnte. Ansonsten musst du wohl mit Text Ersetzungsfunktionen herangehen und alles herausschneiden, was dich interessiert.

    http://www.postgresql.org/docs/8.2/i...ns-string.html
    das mit dem eigenem Thread tut mir leid.

    Dann gibt jemand die Tel. Nummer 6767-0 ein und ein anderer 67670.
    Außerdem will ich die - und / zeichen in der Datenbank ja behalten.

    Kennt vill jemand ne Funktion, so ähnlich wie btrin, nur umgekehr, also dass ich den ganzen satz lösche, außer das was ich eigentlich trim???
    versteht ihr wie ich das meine???

  7. #37
    ads
    ads ist offline Super-Moderator
    Registriert seit
    08.02.2006
    Ort
    MD
    Beiträge
    4.056

    Standard

    Hast du auf die URL geschaut, die in meinem letzten Posting stand? Dort sind unter anderem Regexp Funktionen, die genau das realisieren können, was du möchtest.

    Besonders schnell wird das allerdings nicht werden *grübel*
    Xandrian: Kurz gesagt: Du hast ein falsches Konzept und willst nicht auf ads hören

    Jetzt NEU: PostgreSQL - Datenbankpraxis für Anwender, Administratoren und Entwickler

    PostgreSQL Service & Support

  8. #38
    DecKeL ist offline Neuer Benutzer
    Registriert seit
    21.03.2007
    Beiträge
    4

    Standard

    Zitat Zitat von ads Beitrag anzeigen
    Hast du auf die URL geschaut, die in meinem letzten Posting stand? Dort sind unter anderem Regexp Funktionen, die genau das realisieren können, was du möchtest.

    Besonders schnell wird das allerdings nicht werden *grübel*
    also substing hört sich eig ganz gut an, aber ich tscheck da nicht so ganz durch.
    falls es nicht zu anstrengend währe, fände ich nen beispiel ganz nett ;-)

    bei so einem datensatz '09879/089898-8', wüsset ich jetzt nicht wie ich die ganzen zahlen ruasfiltern kann.

    ach und das mit der schnelligkeit, iss imemrnoch besser alls alle anderen möglichkeiten.

  9. #39
    ads
    ads ist offline Super-Moderator
    Registriert seit
    08.02.2006
    Ort
    MD
    Beiträge
    4.056

    Standard

    substring() wird dich nicht weiterbringen, weil du damit nur Texte ausschneiden kannst, aber nicht weisst, welche Texte du genau herausschneiden musst.

    Code:
    test=# \timing
    Timing is on.
    test=# select regexp_replace('09879/089898-8', '[^0-9]', '', 'g');
     regexp_replace 
    ----------------
     098790898988
    (1 row)
    
    Time: 197.111 ms
    Wie man sieht, hast du dein Ergebnis. Aber die Abfrage dauert, im Verhältnis gesehen, hier schon recht lange. Also erwarte nicht wirklich viel.

    *seufz* Warum erledigen wir eigentlich die ganze Arbeit, während andere keine Zeit aufweisen, auch mal etwas zu lesen?
    Xandrian: Kurz gesagt: Du hast ein falsches Konzept und willst nicht auf ads hören

    Jetzt NEU: PostgreSQL - Datenbankpraxis für Anwender, Administratoren und Entwickler

    PostgreSQL Service & Support

  10. #40
    DecKeL ist offline Neuer Benutzer
    Registriert seit
    21.03.2007
    Beiträge
    4

    Standard

    ohhh...großer meister ich danke Ihnen....
    ja also so geht es. vielen vielen dank nochmal damit habe ich mir jetzt ne menge zeit gespart.

    muss ganz ehrlich sagen, das dass mein erste post in irgendeinem forum ist, wo ich was frage. ich versuche schon immer, selber auf die lösungen zu kommen, oder freunde zu fragen, aber diesmal habe ich mich irgendwei verannt.

Seite 4 von 4 ErsteErste ... 234

Ä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