我想验证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
命令可能出现什么问题?
答案 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);
答案 1 :(得分:1)
您需要更改代码中的条件顺序: -
select * from table1 where fullname
like CONCAT('%', trim(CONCAT(firstname,' ',middlename,' ',lastname)) , '%')