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