简体   繁体   English

SQL搜索查询多个Where子句,例如,名字和姓氏

[英]SQL Search Query for Multiple Where Clauses e.g. Firstname AND Surname

I have a SQL Search Query which works if I search on the First Name or the Surname: 我有一个SQL搜索查询,如果我搜索名字或姓氏,该查询将起作用:

SELECT     MemberID, FirstName, Surname, Title + ' ' + FirstName + ' ' + Surname AS FullName
FROM         Members
WHERE FirstName + Surname LIKE N'%' + 'Smith' + '%'
ORDER BY FullName

If I search for John I see all John's if I search for Smith I see all Smith's What I would like is to search for John Smith and see all John Smith's . 如果我搜索John,那么我会看到所有的John。如果我搜索Smith,我会看到所有的Smith 。我想搜索John Smith,然后查看所有John Smith的东西 Thanks 谢谢

UPDATE: I should have made my original post clearer. 更新:我应该把我的原始帖子弄清楚。 I am using vb.net and when the user enters a search term into a text box the actual query that is run is as follows: 我正在使用vb.net,当用户在文本框中输入搜索词时,运行的实际查询如下:

SELECT     MemberID, FirstName, Surname, Title + ' ' + FirstName + ' ' + Surname AS FullName
FROM         Members
WHERE FirstName + Surname LIKE N'%' + @SearchTerm + '%'
ORDER BY FullName

I want the user to be able to type: John S and see all users called John with a Surname of S. 我希望用户能够键入: John S,并查看所有名为John且姓氏为S的用户。

SELECT     MemberID, FirstName, Surname, Title + ' ' + FirstName + ' ' + Surname AS FullName
FROM         Members
WHERE FirstName LIKE '%john%'
AND Surname LIKE '%smith%'
ORDER BY FullName;

Based on the caveats and conditions in your comments on other questions, your best bet is going to be have two search boxes (firstname and surname) and build a query that looks something like this. 根据您对其他问题的评论中的注意事项和条件,最好的选择是使用两个搜索框(名字和姓氏),并构建一个类似于以下内容的查询。

SELECT   MemberID, FirstName, Surname, Title + ' ' + FirstName + ' ' + Surname AS FullName
FROM         Members
WHERE FirstName like N'%' + @SearchFirst + '%' AND
      Surname LIKE N'%' + @SearchSurname + '%'
ORDER BY FullName

Alternatively you could try to manually parse a single search box into first and last name before inserting the values into your query. 或者,您可以尝试在将值插入查询之前手动将单个搜索框解析为名字和姓氏。 But parsing names is a very dicey affair not entered into lightly. 但是解析名称是一件很容易的事,请不要轻描淡写。

SELECT     MemberID, FirstName, Surname, Title + ' ' + FirstName + ' ' + Surname AS FullName
FROM         Members
WHERE FirstName + Surname LIKE N'%' + 'Smith' + '%'
ORDER BY FullName

Okie, I'mma try to take a crack at this. 好的,我想尝试解决这个问题。 Assuming that you want to search for last and first name. 假设您要搜索姓氏和名字。

SELECT     MemberID, FirstName, Surname, Title + ' ' + FirstName + ' ' + Surname AS FullName
FROM         Members
WHERE FirstName='John' AND Surname='Smith'
ORDER BY FullName

Would this work? 这行得通吗?

SELECT     MemberID, FirstName, Surname, Title + ' ' + FirstName + ' ' + Surname AS FullName
FROM         Members
WHERE FirstName + ' ' + Surname LIKE N'%' + SearchTerm + '%'
ORDER BY FirstName

Here SearchTerm could be any John Smith, Or John S, Or John, Or simply J 这里SearchTerm可以是任何John Smith,John S,John或J

Unless you have data like this: 除非您有这样的数据:

     Firstname              |  Lastname
     John Stewart           |  Mill

your query above with Searchterm = '%John M%' will find all the Johns whose surname begins with M, provided that you concatenate a space: 如果您串联一个空格,则在上面使用Searchterm ='%John M%'的查询将查找所有姓氏以M开头的所有Johns。

           where firstname + ' ' + lastname like '%John S%'

However you won't get great performance with CONTAINS-SUBSTRING type queries (ie wildcard on either side of the search term). 但是,使用CONTAINS-SUBSTRING类型查询(即,搜索词两侧的通配符)将不会获得出色的性能。 Starts-with queries can make use of an index, so it would better to write: 从头开始查询可以利用索引,因此最好编写:

     where firstname = 'John'    -- can use an index on firstname column
     and lastname like 'S%'      -- can use an index on lastname column

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM