2010-07-21 2 views
3

У меня есть таблица Customer с 2 столбцами Имя и фамилия (sql Server 2008). Пользователь хочет выполнить поиск по имени-фамилии - или просто набрать Jo Bloggs. Предположим, что строка заполняетсяФункция LIKE в запросе 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 

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

ответ

3

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

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

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

+0

Спасибо всем за ваши ответы. Более одного ответа будет работать, но я должен был выбрать один. Спасибо – user9969

3
select * from customer where Name like '%Jo%' and Surname like '%Bloggs%' 
+0

Должно работать ... даже если пользователь не набирает имя или фамилию, например «%%» будет соответствовать всем ... – StuartLC

+1

будет работать - но он всегда будет выполнять полное сканирование таблицы, так как использование 'LIKE% Jo%' не будет обработано по индексу .... производительность будет уродливой .... –

0
select * from customer where Name like '%Jo%'    
union 
select * from customer where Surname like '%Bloggs%' 
+0

Это дало бы 'или' Я думаю, что OP хочет 'и' –

4

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

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

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

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

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

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