2016-08-02 4 views
0

Ich habe eine gespeicherte Prozedur, die ich übergeben in einer allgemeinen String-Variablen namens @SearchText als Varchar. Diese Variable enthält Namen, entweder einen Teil eines Namens oder einen vollständigen Namen. Ich muss eine Auswahl für eine Tabelle basierend auf dieser Variablen mit Platzhaltern vornehmen. Die Eingangsvariable könnte etwas wie (für den Namen 'John Smith') sein:Durchführung von SQL-Auswahl gegen einen vollständigen Namen mit Platzhaltern

'j', 'joh', 'john', 'sm', 'smith', 'john s', john smith '. .. Sie bekommen den Punkt.

Also, das stumpfe Ansatz, den ich nahm, ist

select x from TableA 
where FirstName like '%' + @SearchText + '%' 
OR LastName like '%' + @SearchText + '%' 

Natürlich, wenn ein Raum es vermasselt Satz das Ergebnis angetroffen wird. Kann mir bitte jemand helfen, zu verstehen, wie man das ändert, damit es auf jede "Menge" des vollen Namens passt?

Wenn dies bereits beantwortet wurde, konnte ich es nicht finden ... ein Hotlink zu einer bestehenden Lösung wäre hier ebenso willkommen.

Antwort

2

Ich könnte so etwas wie dies vorschlagen:

where FirstName + ' ' + Lastname like '%' + replace(@Searchtest, ' ', '%') + '%' or 
     LastName + ' ' + Firstname like '%' + replace(@Searchtest, ' ', '%') + '%' 

Wenn Sie jedoch solch eine Volltextsuche zu tun versuchen, Sie sich anschauen sollten einen Volltextindex verwenden. Dies bietet im Allgemeinen die richtige Funktionalität für diese Art von Abfragen.

+0

Ich stimme dem Vorschlag für den Volltext-Index zu ... für den Moment bringt mich das über die Blockade hinweg. Wählen Sie dies als die Antwort, nur weil es etwas robuster als die anderen ist. – optionsix

2

Sie können dies wie folgt:

select x from TableA 
where FirstName+' '+LastName like '%' + @SearchText + '%' 

Grundsätzlich Sie den Vor- und Nachnamen zuerst und wenden Sie den LIKE-Operator auf die Verkettung verketten.

Verwandte Themen