mysql concat和like命令出现问题

3zwjbxry  于 2021-06-23  发布在  Mysql
关注(0)|答案(2)|浏览(333)

我想验证中的数据 MYSQL 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 命令?

1dkrff03

1dkrff031#

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

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);

演示

ldioqlga

ldioqlga2#

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

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

sql小提琴

相关问题