Как разделить поле имени, разделенное запятыми, в MySQL на имя, отчество, фамилию и полное имя?

У меня есть столбец NAME, и данные хранятся в базе данных MySql следующим образом:

Доу, Джон П.

Я хотел бы разбить его на FNAME LNAME MNAME и FULLNAME.

Если я не хочу вмешиваться в таблицу SQL, должен ли я создать представление?

Я знаю, как исправить это в PHP с помощью функции, но я бы предпочел, чтобы обработка выполнялась на сервере базы данных, а не на сервере приложений.

Это то, что у меня есть до сих пор. Я думаю, мне нужен составной запрос или что-то подобное.

SELECT Name
       , SUBSTRING_INDEX(Name,',',-1) As FNAME
       , SUBSTRING_INDEX(Name,',',1)  As LNAME
       , SUBSTRING_INDEX(Name,' ',1)  As MNAME 
  FROM people;

У меня возникли проблемы с получением отчества и выполнением того, что, по моему мнению, должно быть функцией CONCAT, чтобы получить FULLNAME.

Было бы здорово, если бы был способ (может быть, условный) для обработки имен в базе данных, у которых нет отчества. (т.е. ДОЭ, ДЖОН).


person Theodis Butler    schedule 09.04.2015    source источник


Ответы (1)


Представление — прекрасный способ получить нужные результаты для будущих запросов. Определяющий запрос будет таким:

SELECT Name, SUBSTRING_INDEX(SUBSTRING_INDEX(Name, ',', -1), ' ', 1)  As FNAME,
       SUBSTRING_INDEX(Name, ',', 1)  As LNAME,
       SUBSTRING_INDEX(Name, ' ', -1)  As MNAME
FROM people;

Это будет работать при условии, что формат точно соответствует описанию в таблице. Небольшие изменения, такие как отсутствие отчества или пробела после запятой, сделают синтаксис более сложным.

person Gordon Linoff    schedule 09.04.2015