我有一个表Customer,有2列Name和Surname(sql Server 2008)。用户想要按Name-Surname搜索 - 或者只是输入Jo Bloggs。假设一行填充
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
但是,如果用户同时输入姓名和姓氏,例如Jo Bloggs,我如何让它返回记录?
答案 0 :(得分:4)
您还可以创建计算列并搜索:
ALTER TABLE dbo.customer
ADD FullName as Name + ' ' + Surname PERSISTED
现在,您的FullName
表格中有一个额外的列customer
,该列始终是最新的,您可以搜索:
SELECT (list of fields) FROM dbo.customer
WHERE Fullname = 'Jo Bloggs'
由于它是一个持久的计算列,你甚至可以在其上放一个索引以更快地进行精确搜索
答案 1 :(得分:3)
select * from customer where Name like '%Jo%' and Surname like '%Bloggs%'
答案 2 :(得分: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注入(而不是慢速)。
答案 3 :(得分:0)
select * from customer where Name like '%Jo%'
union
select * from customer where Surname like '%Bloggs%'