MySQL Concat 和类似命令的问题
Issue with MySQL Concat and like command
我想验证 MYSQL
table 中的数据。 Table 有 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
命令可能有什么问题?
你新附上的数据证实了我的猜测,即全名不一定只由名字和姓氏组成,而是包括中间名,甚至可能缺少这三个部分中的任何一个。这里的一个选择是断言每个存在的组件确实以正确的顺序出现在全名中的某处,例如
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);
您需要更改代码中的条件顺序:-
select * from table1 where fullname
like CONCAT('%', trim(CONCAT(firstname,' ',middlename,' ',lastname)) , '%')
我想验证 MYSQL
table 中的数据。 Table 有 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
命令可能有什么问题?
你新附上的数据证实了我的猜测,即全名不一定只由名字和姓氏组成,而是包括中间名,甚至可能缺少这三个部分中的任何一个。这里的一个选择是断言每个存在的组件确实以正确的顺序出现在全名中的某处,例如
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);
您需要更改代码中的条件顺序:-
select * from table1 where fullname
like CONCAT('%', trim(CONCAT(firstname,' ',middlename,' ',lastname)) , '%')