MySQL Concat 和类似命令的问题

Issue with MySQL Concat and like command

我想验证 MYSQL table 中的数据。 Table 有 4 个字段:

这是我正在使用的命令:

select * from  user_info where CONCAT(firstname, ' ', lastname) 
like  CONCAT('%', fullname, '%')

但是,这不起作用。但是以下命令有效:

select * from  user_info where CONCAT(firstname, ' ', lastname) 
like  '%JOHN DOE%'

MySQL 命令可能有什么问题?

你新附上的数据证实了我的猜测,即全名不一定只由名字和姓氏组成,而是包括中间名,甚至可能缺少这三个部分中的任何一个。这里的一个选择是断言每个存在的组件确实以正确的顺序出现在全名中的某处,例如

SELECT *
FROM yourTable
WHERE
    fullname REGEXP
    CONCAT(
        CASE WHEN firstname IS NOT NULL
             THEN CONCAT('[[:<:]]', COALESCE(firstname, ''), '[[:>:]]')
             ELSE '' END,
        '.*',
        CASE WHEN middlename IS NOT NULL
             THEN CONCAT('[[:<:]]', COALESCE(middlename, ''), '[[:>:]]')
             ELSE '' END,
        '.*',
        CASE WHEN lastname IS NOT NULL
             THEN CONCAT('[[:<:]]', COALESCE(lastname, ''), '[[:>:]]')
             ELSE '' END);

Demo

您需要更改代码中的条件顺序:-

select * from  table1 where fullname
like  CONCAT('%', trim(CONCAT(firstname,' ',middlename,' ',lastname)) , '%')

SQL Fiddle