SQL使用like运算符在多个fileld上找到相同的值

时间:2015-06-18 05:06:41

标签: mysql sql search sql-like

我的users表中有这些记录:

user_id first_name  last_name   gender  email
******* **********  *********   ******  *****
229     Natalie     Fern        F   natalie.fern@hotmail.com

我希望搜索相同的First Name&来自Last Namefirst_name的{​​{1}}。

我创建了sql查询但没有获取记录。

last_name

你注意到我先通过&两个字段的姓氏。

任何想法为什么我没有得到记录?

感谢。

5 个答案:

答案 0 :(得分:1)

您正在使用LIKEfirst_name的{​​{1}}运算符,如下所示:

last_name

这只匹配包含任何后跟'Natalie Fern'后跟任何的字符串。但由于名字和姓氏列仅包含(惊讶)名字和姓氏,因此您的查询不匹配任何记录。您可以使用LIKE '%Natalie Fern%' 尝试匹配名字和姓氏的组合:

CONCAT

如果您想检查第一个姓氏可能是'Natalie'或'Fern'的人,那么您可以使用此查询:

SELECT *
FROM user_detail
WHERE CONCAT(first_name, ' ', last_name)
LIKE '%Natalie Fern%'
LIMIT 0, 30

答案 1 :(得分:1)

你没有记录,因为没有专栏包含像“娜塔莉蕨”这样的想法。

你必须concat两列,你应该得到正确的结果。

但是列的连接不是标准。所以你必须查看DBMS的文档。

这里有一些例子:

  • MySQL:CONCAT()
  • Oracle:CONCAT(),||
  • SQL Server:+

答案 2 :(得分:1)

试试这个

Sql Fiddle

功能

CREATE  FUNCTION [dbo].[fn_Split](@text varchar(8000), @delimiter varchar(20))
RETURNS @Strings TABLE
(   
  position int IDENTITY PRIMARY KEY,
  value varchar(8000)  
)
AS
BEGIN

DECLARE @index int
SET @index = -1

WHILE (LEN(@text) > 0)
  BEGIN 
    SET @index = CHARINDEX(@delimiter , @text) 
    IF (@index = 0) AND (LEN(@text) > 0) 
      BEGIN  
        INSERT INTO @Strings VALUES (@text)
          BREAK 
      END 
    IF (@index > 1) 
      BEGIN  
        INSERT INTO @Strings VALUES (LEFT(@text, @index - 1))  
        SET @text = RIGHT(@text, (LEN(@text) - @index)) 
      END 
    ELSE
      SET @text = RIGHT(@text, (LEN(@text) - @index))
    END
  RETURN
END

查询

SELECT * FROM user_detail inner join 
(select value from fn_split('Natalie Fern',' ')) as split_table 
on (user_detail.first_name like '%'+split_table.value+'%' 
or user_detail.last_name like '%'+split_table.value+'%' ;

答案 3 :(得分:0)

而不是LIKE您可以使用LOCATE查看名字是否在字符串中

SELECT *
FROM user_detail
WHERE LOCATE(first_name,'Natalie Fern') > 0
OR LOCATE(last_name ,'Natalie Fern') > 0 
LIMIT 0 , 30

答案 4 :(得分:0)

如果您需要使用一个搜索输入字段执行此搜索:

SELECT * 
FROM user_detail 
WHERE last_name LIKE '%###VALUE###%' 
OR first_name LIKE '%###VALUE###%' 
OR concat(last_name, ' ', first_name) LIKE '%###VALUE###%' 
OR concat(first_name, ' ', last_name) LIKE '%###VALUE###%';