0

我正在寻找一种方法,您可以在拆分的列表中查找全名

我试过:例如“迈克尔·彼得·约翰逊”

select firstName,middleName,lastName 
from staff 
where concat(firstName, ' ', middlename, ' ', lastname) Like "%michael peter johnson%"

这有效,但如果名称"michael johnson" 无效,则会导致创建 concat 名称:"michael (double space)johnson" 因此 concat 创建了两个空格并且不匹配。

有谁知道另一种方法来解决这个问题?

编辑:想法是字符串“michael peter johnson”是一个用户输入字段。所以它不能分成 3 个单独的字符串 a 这不是这个搜索栏的想法

Edit2:我还注意到,如果中间名是“NULL”,并且带有 NU:: 的 concat(firstName, ' ', middlename, ' ', lastname) 的结果是 NULL,所以它永远不会找到它。

有什么解决办法吗?

谢谢马蒂

4

4 回答 4

2

Replace是另一种选择:

select firstName,middleName,lastName 
from staff 
where replace(concat(firstName, ' ', middlename, ' ', lastname), '  ', ' ') Like "%michael peter johnson%"
于 2013-08-24T19:22:25.340 回答
2

你可以这样做:

select firstName, middleName, lastName 
from staff 
where concat(firstName, ' ', middlename, ' ', lastname) Like "%michael%peter%johnson%"

但我认为你想要:

select firstName, middleName, lastName 
from staff 
where firstName like '%michael%' and
      middleName like '%peter%' and
      lastName like '%johnson%';

或者因为您的数据库值似乎有空格,也许只是:

select firstName, middleName, lastName 
from staff 
where trim(firstName) = 'Michael' and
      trim(middleName) = 'Peter' and
      trim (lastName) = 'Johnson';

编辑:

或者,您可以这样做:

where concat(trim(firstName), ' ', trim(middlename), ' ', trim(lastname)) Like concat('%', 'michael peter johnson', '%')
于 2013-08-24T19:15:18.903 回答
1

如果你和迈克尔·约翰逊一起搜索。做这个

     select name, midle, last 
     from staff
     where concat(name, ' ', midle, ' ', last) Like "%michael%johnson%"

这里演示

编辑:

 select firstName,middleName,lastName 
 from table1
 where (firstName Like "%michael%" AND lastName  LIKE "%johnson%" )
于 2013-08-24T19:20:31.510 回答
0

可能不是最有效的解决方案,但应该可以满足您的要求:

select firstName, midlename, lastname 
from staff
where replace(concat(ifnull(firstName, ''), ifnull(middlename, ''), ifnull(lastname, '')), ' ', '') = replace('michael peter johnson', ' ', '');
于 2013-08-24T19:45:02.880 回答