MySQL Concat和类似命令的问题

时间:2018-04-27 04:04:16

标签: mysql concat

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

  • 中间名
  • 姓氏
  • 全名

    我想比较CONCAT(firstname, ' ', LASTNAME),匹配Fullname

这是我正在使用的命令:

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

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

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

MySQL命令可能出现什么问题?

enter image description here

2 个答案:

答案 0 :(得分:2)

您新附加的数据确认了我怀疑的内容,即全名不一定仅仅由姓和名组成,而是包含中间名,或者甚至可能缺少三个组件中的任何一个。这里的一个选择是声明存在的每个组件确实出现在全名中的某个位置,按照正确的顺序,例如。

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

答案 1 :(得分:1)

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

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

SQL Fiddle