我的users
表中有这些记录:
user_id first_name last_name gender email
******* ********** ********* ****** *****
229 Natalie Fern F natalie.fern@hotmail.com
我希望搜索相同的First Name
&来自Last Name
或first_name
的{{1}}。
我创建了sql查询但没有获取记录。
last_name
你注意到我先通过&两个字段的姓氏。
任何想法为什么我没有得到记录?
感谢。
答案 0 :(得分:1)
您正在使用LIKE
和first_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的文档。
这里有一些例子:
答案 2 :(得分:1)
试试这个
功能
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###%';