Einzelnen Beitrag anzeigen

jensw_2000
(Gast)

n/a Beiträge
 
#5

Re: Ähnlichkeitssuche in einer SQL-Datenbank???

  Alt 6. Sep 2005, 01:56
Beim MSSQL hast du 2 Möglichkeiten das sauber zu lösen ...

Zum einen gibt es die SOUNDEX Funktion

SQL-Code:
   SELECT Vorname
         ,Name
   FROM Mitarbeiter
   WHERE SONDEX(Name) = SOUNDEX('meiher')
   -- findet Maier, Mayer, Meiner ....
Zum Anderen kannst du dir mit DEFFERENCE() eine Suchfunktion mit "Trefferqualität-Ranking" bauen.
Kleines Beispiel:

SQL-Code:
CREATE PROCEDURE SucheMitarbeiter
 @Vorname Varchar(20),
 @Name Varchar(20)
AS
Begin
  -- Liefert die eine Trefferliste der Mitarbeiter.
  -- Die besten Ergebnisse stehen oben, die ganz schlechten sind rausgefiltert ...

DECLARE @MinimalPunkte INT
  SET @MinRank = 5

  SELECT Vorname
         ,Name
         ,CASE WHEN DIFFERENCE(Vorname,@Vorname) IS NOT NULL
               THEN DIFFERENCE(Vorname,@Vorname)
               ELSE 4
          END
          +
          CASE WHEN DIFFERENCE(Name,@Name) IS NOT NULL
               THEN DIFFERENCE(Name,@Name)
               ELSE 4
          END
          AS [Rank]
  FROM Mitarbeiter
  WHERE ( DIFFERENCE(Vorname,@Vorname) > 2 )
           AND
          ( UPPER( LEFT(Vorname,2) ) = UPPER( LEFT(@Vorname,2) )
          AND
          ( DIFFERENCE(Name,@Name) > 2 )
           AND
          ( UPPER( LEFT(Name,2) ) = UPPER( LEFT(@Name,2) )
          AND
          (
          CASE WHEN DIFFERENCE(Vorname,@Vorname) IS NOT NULL
               THEN DIFFERENCE(Vorname,@Vorname)
               ELSE 4
          END
          +
          CASE WHEN DIFFERENCE(Name,@Name) IS NOT NULL
               THEN DIFFERENCE(Name,@Name)
               ELSE 4
          END
          ) > @MinRank
  
  ORDER BY -- nach Rank sortieren
          CASE WHEN DIFFERENCE(Vorname,@Vorname) IS NOT NULL
               THEN DIFFERENCE(Vorname,@Vorname)
               ELSE 4
          END
          +
          CASE WHEN DIFFERENCE(Name,@Name) IS NOT NULL
               THEN DIFFERENCE(Name,@Name)
               ELSE 4
          END
          DESC

End

Beschreibungen zu den Funktionen findest du schnell über Google "MSDN SQL DIFFERENCE" bzw. "MSDN SQL SOUNDEX"

Mit persönicch gefällt die Variante mit dem Ranking ganz gut. weil Soundex manchmal etwas stur ist ...
Falls du Fragen dazu hast können wir das morgen Abend mal durchsprechen ...

Schöne Grüße,
Jens
  Mit Zitat antworten Zitat