SQL使用like运算符在多个字段上查找相同的值
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL使用like运算符在多个字段上查找相同的值相关的知识,希望对你有一定的参考价值。
我在users
表中记录了这些记录:
user_id first_name last_name gender email
******* ********** ********* ****** *****
229 Natalie Fern F natalie.fern@hotmail.com
我想从First Name
或Last Name
搜索相同的first_name
和last_name
。
我创建了sql查询但没有获取记录。
SELECT *
FROM user_detail
WHERE first_name LIKE '%Natalie Fern%'
OR last_name LIKE '%Natalie Fern%'
LIMIT 0 , 30
您注意到我从两个字段传递名字和姓氏。
任何想法为什么我没有得到记录?
谢谢。
答案
您正在使用LIKE
运算符用于first_name
和last_name
,如下所示:
LIKE '%Natalie Fern%'
这只会匹配包含“Natalie Fern”后跟任何内容的字符串。但由于名字和姓氏列仅包含(惊讶)名字和姓氏,因此您的查询不匹配任何记录。您可以使用CONCAT
尝试匹配名字和姓氏的组合:
SELECT *
FROM user_detail
WHERE CONCAT(first_name, ' ', last_name)
LIKE '%Natalie Fern%'
LIMIT 0, 30
如果您想检查名字可能是“Natalie”或“Fern”的人,那么您可以使用此查询:
SELECT *
FROM user_detail
WHERE first_name LIKE '%Natalie%'
OR first_name LIKE '%Fern%'
OR last_name LIKE '%Natalie%'
OR last_name LIKE '%Fern%'
LIMIT 0, 30
另一答案
你没有记录,因为没有列包含像“娜塔莉蕨”这样的东西。
你必须concat
两列,你应该得到正确的结果。
列的位串联不是标准。所以你必须查看DBMS的文档。
这里有一些例子:
- mysql:CONCAT()
- Oracle:CONCAT(),||
- SQL Server:+
另一答案
试试这个
功能
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+'%' ;
另一答案
而不是LIKE
你可以使用LOCATE
来查看名字是否在一个字符串中
SELECT *
FROM user_detail
WHERE LOCATE(first_name,'Natalie Fern') > 0
OR LOCATE(last_name ,'Natalie Fern') > 0
LIMIT 0 , 30
另一答案
如果您需要使用一个搜索输入字段执行此搜索:
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###%';
以上是关于SQL使用like运算符在多个字段上查找相同的值的主要内容,如果未能解决你的问题,请参考以下文章
T-SQL 转义select …. like中的特殊字符(百分号)