Требуется функция LIKE в SQL Server 2008 - PullRequest
3 голосов
/ 21 июля 2010

У меня есть таблица Customer с 2 столбцами Имя и Фамилия (SQL Server 2008). Пользователь хочет выполнить поиск по имени-фамилии - или просто набрав Джо Блоггс. Предположим, что строка заполнена

CustomerId        Name    Surname
1                 Jo      Bloggs

делает

select * from customer where Name like '%Jo%'             will find the records
select * from customer where Surname like '%Bloggs%'      will find the records

Но как я могу заставить его возвращать записи, если пользователь вводит имя и фамилию, например, Джо Блоггс?

Ответы [ 4 ]

4 голосов
/ 21 июля 2010

Вы также можете создать вычисляемый столбец и выполнить поиск по нему:

ALTER TABLE dbo.customer
   ADD FullName as Name + ' ' + Surname PERSISTED

Теперь у вас будет дополнительный столбец FullName в таблице customer, который всегда актуален, ивы можете искать:

SELECT (list of fields) FROM dbo.customer 
  WHERE Fullname = 'Jo Bloggs'

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

3 голосов
/ 21 июля 2010

Это должно работать независимо от того, вводит ли пользователь Имя, Фамилию или и то и другое.

SELECT *
FROM customer cus
WHERE ((cus.Name like @FirstName) OR (@FirstName IS NULL)) AND
      ((cus.Surname like @Surname) OR (@Surname IS NULL))

Я использовал две переменные, потому что ввод входных значений в строку SQL настоятельно не рекомендуется, так как это подвергает SQL-инъекции (кромемедленнее).

3 голосов
/ 21 июля 2010
select * from customer where Name like '%Jo%' and Surname like '%Bloggs%'   
0 голосов
/ 21 июля 2010
select * from customer where Name like '%Jo%'             
union
select * from customer where Surname like '%Bloggs%'   
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...