![]() |
Re: Umlaute anzeigen egal ob Ü oder UE usw.
Ihr versteht meinen Code nicht. :shock:
Inhalt in DB "Übungszünder" (Suchbegriff "ü") : 1. Übungszünder : upper (ü) = Ü ist enthalten -> gefunden. 2. uEbungszünderübung : dto. 3. Uebungszuenderuebung : kein ü, aber das ue wird in Ü umgewandelt -> gefunden Lediglich das erste Vorkommen von ue muß ersetzt werden !! |
Re: Umlaute anzeigen egal ob Ü oder UE usw.
du verstehts meinen gedanken nicht:
bei deiner Erläuterung wird nach ü oder ue gesucht. Wenn ich als Suchbegriff aber ein ganzes Wort vorgebe, dann gibts Probleme. Und wenn in der DB Raesenmäher steht und ich Suche in dem Edit-Feld nach Räsenmaeher dann dürfte er das mit deiner Suche nicht finden. Oder bin ich nun ganz blöd geworden? ^^ , obwohl, ist ja schon Freitag :D |
Re: Umlaute anzeigen egal ob Ü oder UE usw.
Also gut : Räsenmäher steht in DB und als Suchbegriff wird Raesenmaeher eingegeben. Und ? Stringreplace mit rfReplaceAll für den Suchbegriff eingeben. Dann die DB durchwandern und jeden DS genauso behandeln (ä in ae umwandeln) und dann vergleichen. Und bevor jetzt noch behauptet wird, das sei langsam : so ist es. Aber was ist nicht relativ bei 3 GHz ? Durch LIKE und % hindert man die DB so oder so daran einen Index zu benutzen.
|
Re: Umlaute anzeigen egal ob Ü oder UE usw.
Nimm doch einfach Jellys Vorschlag und erstelle dir in deiner MySQL DB eine UDF (Userdefined Function).
Der (my)SQL Server erledigt die Zeichenersetzung flink während des Selects mit. Einfacher gehts doch garnicht. Zudem erschlägt man alle Sonderfälle auf einmal (Groß-Kleinschreibung, Umlaute,'ß'-'ss') und braucht nicht hunterdt IF's und POS(bla) im Delphi-Code verbauen. Hier ein Beispiel in MSSQL Syntax. Den Code kannst du mit einem kurzen Blick ins MySQL-Handbuch innerhalb weniger Minuten für MySQL anpassen.
SQL-Code:
CREATE Function ReplaceSpecialChars
@InputParam VARCHAR(4000) -- ein Eingabeparameter an den du deinen Suchbegriff übergibst RETURNS VarChar(4000) -- Die Funktion liefert Varchar zurück AS BEGIN DECLARE @TMP VARCHAR(4000) -- eine Temporäre Variable deklarieren SET @TMP = LOWER(@InputParam) -- Suchbegriff als LowerCase in @TMP einlesen SET @TMP = REPLACE(@TMP,'ß','ss') -- gewünschte Zeichen ersetzen SET @TMP = REPLACE(@TMP,'ä','ae') SET @TMP = REPLACE(@TMP,'ö','oe') SET @TMP = REPLACE(@TMP,'ü','ue') RETURN @TMP -- die fertige Zeichenkette aus Result zurückgeben END Verwendung :
SQL-Code:
SELECT Vorname,Nachname FROM Personal WHERE dbo.ReplaceSpecialChars(Nachname) = LOWER(@Suchbegriff) Falls du die Funktion sehr häufig für ein und die selben Feler bestimmter Tabellen benutzt, kannst du in der Tabelle auch flink für jedes (häufig zum suchen verwendete) Feld ein berechnetes Feld hinzufügen. Als Formel für das berechnete Feld nimmst du in diesem Fall auch "dbo.ReplaceSpecialChars(<Feldname>)". Schöne Grüße, Jens :hi: |
Re: Umlaute anzeigen egal ob Ü oder UE usw.
Zitat:
Zitat:
Wie mein Link bereits oben zeigt geht das relativ einfach über Regular Expression, REGEXP... Zum Suchen: entweder man vergleicht Äpfel mit Äpfel (also Räsenmäher mit Suchstring mäher), Birnen mit Birnen (Raesenmaeher mit maeher), aber nicht Äpfel mit Birnen (Räsenmäher mit maeher). Es führt also kein Weg dran vorbei, in der DB alle Einträge in ue umzuwandeln, und genauso auf Delphiebene im Suchstring. |
Re: Umlaute anzeigen egal ob Ü oder UE usw.
Zitat:
Noch ne Ergänzung: um sich die Tipparbeit auf Delphiebene zu sparen, da ja der Suchstring auch umgewandelt werden muss damit die Where Bedingung pass, kann man das auch einfach so formulieren:
SQL-Code:
edit: Tags vergessen
SELECT Vorname,Nachname FROM Personal WHERE dbo.ReplaceSpecialChars(Nachname) = dbo.ReplaceSpecialChars(@Suchbegriff)
|
Re: Umlaute anzeigen egal ob Ü oder UE usw.
Hai Jelly,
ab welcher Version unterstützt mySQL denn UDFs? |
Re: Umlaute anzeigen egal ob Ü oder UE usw.
Zitat:
|
Re: Umlaute anzeigen egal ob Ü oder UE usw.
Zitat:
SQL-Code:
suchen sondern nach
WHERE Feld LIKE 'räsenmäher' OR Feld LIKE 'raesenmaeher'
SQL-Code:
WHERE Feld REGEXP 'r(ä|ae)senm(ä|ae)her'
Zitat:
|
Re: Umlaute anzeigen egal ob Ü oder UE usw.
Nicht schön aber selten ;-)
SQL-Code:
SELECT * FROM tabelle
WHERE REPLACE( REPLACE( REPLACE( REPLACE(Lower( feldname ), 'ä', 'ae'), 'ö', 'oe'), 'ü','ue'), 'ß', 'ss') = Lower(:param) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:18 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz