Ein Ansatz ist es, eine Liste aller Abkürzungen haben und was sie entsprechen.
Erstellen Sie im Wesentlichen eine separate Tabelle, die die Abkürzung in den vollständigen Namen erweitert.
Tabelle Abbrevs
mit Spalten Abbrev, Name
.
Für Ihr Beispiel wird es diese Zeilen enthalten:
Abbrev Name
ma Maria
ma Ma.
ma. Maria
ma. Ma
sta Santa
sta Sta.
sta. Santa
sta. sta
für die Zeichenfolge Dann sind die Benutzer zur Verfügung gestellt und alle möglichen Synonymen für diesen Namen. Etwas wie folgt aus:
DECLARE @ParamInput nvarchar(255);
SET @ParamInput = 'ma';
SELECT *
FROM YourTable
WHERE
YourTable.Name = @ParamInput
OR YourTable.Name IN
(
SELECT Abbrevs.Name
FROM Abbrevs
WHERE Abbrevs.Abbrev = @ParamInput
)
;
können Sie lassen Benutzer definieren und bearbeiten Sie die Abbrevs
Tabelle.
Wenn beide Benutzereingaben und die Tabelle Abkürzungen haben können, und Sie müssen LIKE
verwenden, keine einfaches =
für die Suche, dann würde ich so etwas wie die folgenden tun.
Es wird immer noch eine separate Tabelle, die Abkürzungen erweitert (oder vielmehr eine Liste der möglichen Abkürzungen von einem bestimmten Namen):
Abbrev Name
ma Maria
ma. Maria
sta Santa
sta. Santa
Zusätzlich zu, dass ich eine Funktion haben würde, die den gegebenen Namen normalisiert . Die Funktion würde im gegebenen Namen nach möglichen Abkürzungen suchen und diese erweitern.
Zum Beispiel gibt die Funktion Maria Teresa
unter Verwendung der Abbrevs
Tabelle zurück.
Ihre Haupttabelle hat ein Feld Name
mit ursprünglichem Namen, der Abkürzungen haben kann. Ich werde eine weitere (berechnete oder beibehaltene) Spalte NormalizedName
hinzufügen, die von dieser Funktion aufgefüllt würde. In der Praxis habe ich eine solche Spalte zu einer normalen persistenten Spalte gemacht und einen Trigger geschrieben, der seinen Wert aktualisiert hat, wenn sich die Hauptspalte Name
ändert. Ein Schritt der Normalisierung bestand darin, alle Strings in Großbuchstaben zu bringen. Sie können einige andere Regeln einbauen, wie das Verwerfen aller Punkte, Kommas, Bindestriche und anderer Symbole, das Ersetzen doppelter Leerzeichen durch einzelnes Leerzeichen etc.
Sie zeigen dem Benutzer nur die ursprünglichen Name
Werte.
Wenn ein Benutzer einen Namen für die Suche bietet, ich normalisieren den gegebenen Namen die gleiche Funktion und die Suche nach normalisierten Wert in der NormalizedName
Spalte mit einer einfachen
WHERE NormalizedName LIKE '%'[email protected]+'%'
Bearbeiten Sie Ihre Frage und liefern Sie Beispieldaten und gewünschte Ergebnisse. –
Ich habe meine Frage bearbeitet, vielen Dank. – Joseph