Mysql 在person表中搜索给定名称

Mysql 在person表中搜索给定名称,mysql,Mysql,我在yu db中有一个person表,分别存储firstname和lastname。如果firstname是“John”,lastname是“Doe”,而我搜索的是“John D”,我如何进行搜索呢?将“John D”拆分为“John”和“D”,然后使用如下查询: 选择*FROM person WHERE firstname=“John”和lastname,如“D%”将“John D”拆分为“John”和“D”,然后使用如下查询: 从firstname=“John”和lastname(如“D%”

我在yu db中有一个person表,分别存储firstname和lastname。如果firstname是“John”,lastname是“Doe”,而我搜索的是“John D”,我如何进行搜索呢?

将“John D”拆分为“John”和“D”,然后使用如下查询:

选择*FROM person WHERE firstname=“John”和lastname,如“D%”

将“John D”拆分为“John”和“D”,然后使用如下查询:

从firstname=“John”和lastname(如“D%”)所在的人员中选择*

您还应该确保将所有字符串转换为小写或进行不区分大小写的搜索


编辑:如果firstname或lastname可以为null,那么最好使用CONCAT_WS而不是CONCAT

您还应该确保将所有字符串转换为小写或进行不区分大小写的搜索



编辑:如果firstname或lastname可以为null,那么最好使用CONCAT_WS而不是CONCAT。

是否缺少CONCAT_WS的参数?是否缺少CONCAT_WS的参数?firstname/name可以是任意顺序。如何处理中间名案件?OP明确表示,他希望John Doe搜索“John D”。这意味着第一个名字是第一个,在这个问题中没有提到中间名字。你是那个否决我答案的人吗?你选择在哪里拆分“John W do”,为什么?连接数据库字段可以避免中间名是否存储在名字或姓氏中,甚至可以连接到第三个中间名字段中的问题。不过没什么重要的,我同意。啊,我明白你的意思。我以为你说的是数据库中的中间名(也可能是)。如果搜索字符串是“John Paul van D”,那么就无法知道应该将其拆分到哪里。我同意在数据库列上执行concat更好、更健壮。firstname/name可以是任意顺序。如何处理中间名案件?OP明确表示,他希望John Doe搜索“John D”。这意味着第一个名字是第一个,在这个问题中没有提到中间名字。你是那个否决我答案的人吗?你选择在哪里拆分“John W do”,为什么?连接数据库字段可以避免中间名是否存储在名字或姓氏中,甚至可以连接到第三个中间名字段中的问题。不过没什么重要的,我同意。啊,我明白你的意思。我以为你说的是数据库中的中间名(也可能是)。如果搜索字符串是“John Paul van D”,那么就无法知道应该将其拆分到哪里。我同意在数据库列上进行concat更好、更健壮。那么,您的答案如何处理“中间名案例”?这很好,尽管OP可能不希望“John D”与“David John”匹配,在这种情况下,您只需要OR的第二个子句。如果两个结果都需要,那么这就得到了。那么,你的答案如何处理“中间名案例”?这很好,尽管OP可能不希望“John D”与“David John”匹配,在这种情况下,你只需要OR的第二个子句。如果两个结果都需要,那么这就得到了它们。
select * from table where concat_ws(' ',name,surname) like 'John D%'
SELECT * 
FROM table 
WHERE LOWER(CONCAT(lastname, ' ', firstname)) LIKE 'john d%'
   OR LOWER(CONCAT(firstname, ' ', lastname)) LIKE 'john d%'