2016-08-02 3 views
0

У меня есть хранимая процедура, которую я передаю в общей строковой переменной, называемой @SearchText, как varchar. Эта переменная содержит имена, либо часть имени, либо полное имя. Мне нужно сделать выбор в таблице на основе этой переменной, используя подстановочные знаки. Входящая переменная может быть что угодно (для названия «john smith»):Выполнение sql select от полного имени с использованием подстановочных знаков

'j', 'joh', 'john', 'sm', 'smith', 'john s', john smith '. .. вы понимаете.

Итак, тупой подход, который я принял это

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

Очевидно, когда пространство столкнулся с ним винты до набора результатов. Может кто-то, пожалуйста, помогите мне понять, как настроить это, чтобы он мог соответствовать любой «сумме» полного имени?

Если это уже был дан ответ, я не смог бы найти его ... ссылка на существующее решение была бы так же оценена.

ответ

2

я мог бы предложить что-то вроде этого:

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

Однако, если вы пытаетесь сделать такой полнотекстовой поиск, вы можете рассмотреть возможность использования полнотекстового индекса. Это, как правило, обеспечивает необходимый уровень функциональности для этих типов запросов.

+0

Я согласен с полным предложением индекса текста ... на данный момент это заставляет меня пройти мимо блокировки. Выбор этого в качестве ответа только потому, что он немного более устойчив, чем другие. – optionsix

2

Вы можете сделать это следующим образом:

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

В принципе, вы сцепить имя и фамилию первого и применить LIKE оператор на конкатенации.

Смежные вопросы