Проблема с MySQL Concat и подобной командой - PullRequest
0 голосов
/ 27 апреля 2018

Я хочу проверить данные в таблице 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 голосов
/ 27 апреля 2018

Вам необходимо изменить порядок условий в вашем коде: -

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

SQL Fiddle

0 голосов
/ 27 апреля 2018

Ваши новые прикрепленные данные подтверждают то, что я подозревал, а именно то, что полное имя не обязательно состоит просто из имени и фамилии, но включает в себя отчество, или может даже отсутствовать какой-либо из трех компонентов. Один из вариантов здесь - утверждать, что каждый присутствующий компонент появляется где-то внутри полного имени в правильном порядке, например

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

Демо

...