我有一个以全名为例的文本字段:michael peter johnson 在我的表中,我有三列firstName,middlename和lastname 我写了这个查询,但它返回空
SELECT firstName,middleName,lastName
FROM staff
WHERE firstName LIKE "%michael peter johnson%"
OR middleName LIKE "%michael peter johnson%"
OR lastName LIKE "%michael peter johnson%"
如果用户输入儿子,它应该显示michael peter johnson,因为儿子包含在约翰逊中。
感谢 我的表:firstName有(michael)middleName有(彼得)lastName(约翰逊)
答案 0 :(得分:8)
如果我理解的话,它目前适用于firstname / middlename / lastname的部分,但如果你想输入全名则不行。
要解决这个问题,yOu可以使用concat,因此它始终有效:
select firstName,middleName,lastName
from staff
where concat(firstName, ' ', middlename, ' ', lastname) Like "%michael peter johnson%"
答案 1 :(得分:4)
您正在检查其中包含{{1>} 所有 的字符串。
您需要三个单独的陈述,并进行不同的比较......
michael peter johnson
你可以反转逻辑......
WHERE
firstName Like '%michael%'
or middleName Like '%peter%'
or lastName Like '%johnson%"
您还举例说明搜索WHERE
'michael peter johnson' LIKE '%' + firstName +'%'
or 'michael peter johnson' LIKE '%' + middleName +'%'
or 'michael peter johnson' LIKE '%' + lastName +'%'
。您现有的代码将为此工作。当您将名称的每个部分与具有所有名称的参数进行比较时,这只是一个“问题”。
那么,也许你想要两个版本在一起?
'son'
您只需确定您想要的行为,然后再进行处理。
答案 2 :(得分:1)
你想要这些内容:
SELECT * FROM mytable
WHERE CONCAT(firstName, ' ', middleName, ' ', lastName) LIKE '%son%'
这会将所有名称字段连接成一个全名。
希望这会有所帮助。您可能希望在等式的两边都做LOWER()
。如果我可以添加评论,如果你的数据库中有很多名字,这不是一个特别好的方法。
答案 3 :(得分:1)
在sql中:
firstName Like "%michael peter johnson%"
表示名字可以以任何字符开头,然后字符串“michael peter johnson”应该在其中,最后一个%表示它可以以任何字符结尾。 如果你想找到带儿子的约翰逊作为输入,你的测试应该是
select firstName,middleName,lastName
from staff
where firstName Like "%son%"
or middleName Like "%son%"
or lastName Like "%son%"
或者使用正则表达式:
select firstName,middleName,lastName
from staff
where firstName REGEXP ".*son.*"
or middleName REGEXP ".*son.*"
or lastName REGEXP ".*son.*"
答案 4 :(得分:0)
实际上,您的查询应如下所示:
where CONCAT("%",firstName,"%") Like "michael peter johnson"
or CONCAT("%",middleName,"%") Like "michael peter johnson"
or CONCAT("%",lastName,"%") Like "michael peter johnson"
原因是LIKE将%与任意数量的字符匹配,但不会删除字符 - 例如,"test"
匹配"%es%"
但不匹配"%atesta%"
。希望这会有所帮助。
答案 5 :(得分:0)
您可以在查询中使用concat函数:
select firstName,middleName,lastName from staff where CONCAT(firstName,middleName,lastName) like ('%johnson%');