提问人:Adey 提问时间:9/27/2023 最后编辑:Adey 更新时间:9/27/2023 访问量:31
SQL SELECT,其中多个列包含已提交字符串的任何部分
SQL SELECT where multiple columns contain any part of submitted string
问:
扩展这个线程,这并不完全是我所追求的 - SQL SELECT WHERE 字段包含单词
我有一个“姓名”字段供某人输入全名(名字和姓氏),但MySQL数据库将数据分为2列,usrFirstName和usrLastName。
我希望选择 usrFirstName 和 usrLastName 与字符串相同的任何成员,或者如果只能输入姓氏,则选择 usrLastName 与字符串相同的所有成员。
我试过“SELECT * from users WHERE usrFirstName LIKE ?或者 usrLastName LIKE ?(其中 ? 是提交的字符串),但这不起作用,因为它在任一列中查找全名。
将不胜感激任何帮助,非常感谢。
答:
0赞
Rob Eyre
9/27/2023
#1
尝试
SELECT *
FROM users
WHERE TRIM(CONCAT_WS(' ', usrFirstName, usrLastName)) = ?
OR usrLastName = ?
(其中是要搜索的参数)?
CONCAT_WS
用于用空格连接名字和姓氏。如果其中任何一个为 null(例如,缺少名字),则跳过它们。
TRIM
用于删除数据中的任何前导空格或尾随空格(例如,如果名字或姓氏为空字符串,则可能会发生这种情况)
=
用于(而不是 )来确保相同的匹配。相反,如果要搜索部分全名或部分姓氏,请更改为LIKE
= ?
LIKE CONCAT('%', ?, '%')
评论
0赞
Adey
9/27/2023
谢谢 Rob,如果用户输入要搜索的全名,这看起来会起作用,但是在他们可能只搜索姓氏即“Smith”的情况下,它是否仍会返回连接字符串中包含“Smith”的所有行,或者我应该使用 LIKE 而不是 = 所以它不相同?
0赞
Rob Eyre
9/27/2023
啊,我误会了——我以为你的意思是数据库中的名字可能是空白的。我调整了答案,以还包括姓氏与搜索字符串相同的行
0赞
Adey
9/27/2023
谢谢,是的,数据库中总是有名字和姓氏,但搜索的管理员用户可能会搜索全名或部分名称,并返回用户列表。
评论
SELECT * from users WHERE TRIM(CONCAT_WS(' ', usrFirstName, usrLastName)) = ?
=
LIKE