![]() |
Datenbank: firebird • Version: 2.0 • Zugriff über: ibx, ibexpert
fuzzy matches via sql
hallo
ich habe eine frage, stellt euch folgende sql-abfrage vor:
SQL-Code:
angenommen, die ergebnismenge ist leer; kann ich meine select-abfrage irgendwie abändern, so dass ich trotzdem noch wenigsten denjenigen datensatz zurückbekomme, dessen feld-wert von allen am nächsten an x dran ist?
select * from tabelle where feld = x
danke, martin |
Re: fuzzy matches via sql
Zitat:
SQL-Code:
select * from tabelle where feld LIKE x
|
Re: fuzzy matches via sql
klingt naheliegend nur leider bekomm ich da die gleiche ergebnismenge zurück wie bei '='; also leer wenn es keinen datensatz mit GENAU dem wert gibt :-(
|
Re: fuzzy matches via sql
wenn es sich um einen Strinwert handelt kannst Du auch mit Wildcards arbeiten.
select * from tabelle where feld LIKE %x% Grüße Klaus |
Re: fuzzy matches via sql
Hallo Martin,
das ist ein Standardproblem und es wird so gelöst:
SQL-Code:
Grüße vom marabu
/* predecessor when missing */
select * from tabelle where feld <= :x order by feld desc rows 1 /* successor when missing */ select * from tabelle where feld >= :x order by feld rows 1 |
Re: fuzzy matches via sql
Hmmm,
das is aber nicht ganz das Gleiche, weil ich da vorher wissen muss, ob ich den Vorgänger oder den Nachfolger will. Ich will aber genau denjenigen Eintrag, der am geringsten von Beiden von meinem gewünschten String entfernt ist. Wenn es irgendwie 'ne Möglichkeit gäbe, in SQL nach der Differenz zwischen zwei Strings zu fragen, dann müsstes irgendwie gehen... |
Re: fuzzy matches via sql
Dein Problem kannst du möglicherweise in einer SP in Verbindung mit einer SoundEx-Funktion lösen. In der SP interierst du über alle Datensätze und vergleichst den Suchstring mit dem Werten und merkst dir den Datensatz mit der höchsten Ähnlichkeit. Diesen gibst du dann zurück.
|
Re: fuzzy matches via sql
hier ist mal ein Lin, wo über soundex diskutiert wurde
-> ![]() Ist nicht sehr erbaulich was dabei herauskam. Grüße Klaus |
Re: fuzzy matches via sql
Zitat:
Wär's nicht besser einfach nur zu schauen, OB der Datensatz da ist und wenn er NICHT da ist einfach mit Vorgänger und Nachfolger zu vergleichen und dann den mit der geringsten Differenz zurückzugeben? Das Problem ist nur, dass ich nicht genau weiß wie ich das ausdrücken muss ich meine wie ich so eine Stored Procedure definiere, krieg ich ja vielleicht noch raus, aber wie berechne ich die Differenz zwischen zwei Strings? Oder besser: wie bestimme ich, welcher von Zwei Strings x und y dem String z am ähnlichsten ist?? Zitat:
|
Re: fuzzy matches via sql
Hallo Martin,
Zitat:
![]() marabu |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:21 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