Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Фамилия И. О. из одного поля / 17 сообщений из 17, страница 1 из 1
18.07.2015, 15:11:29
    #39010465
Запрос+
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Фамилия И. О. из одного поля
Есть поле 'fio', в котором записи формата "Фамилия Имя Отчество". Да, поле одно.
Выдёргиваю из него данные и привожу их в формат "Фамилия И. О.":

Код: sql
1.
SELECT concat(SUBSTRING_INDEX(fio, ' ', 1), ' ', left(SUBSTRING_INDEX(SUBSTRING_INDEX(fio, ' ', 2), ' ', -1), 1), '. ', left(SUBSTRING_INDEX(SUBSTRING_INDEX(fio, ' ', -1), ' ', -1), 1), '.') fio FROM peoples



И всё вроде бы отлично, но если запись была сделана в формате "Петров Иван" (т.е. без отчества), то я в итоге получаю "Петров И. И." (т.е. вместо отчества повторно проставляется первая буква имени). Помогите, пожалуйста - как это исправить?
...
Рейтинг: 0 / 0
18.07.2015, 19:34:12
    #39010576
Запрос+
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Фамилия И. О. из одного поля
Неужели то, что мне нужно, в принципе нереально? Обложился мануалами, разобрал уже почти полсотни примеров, но за 4 часа ни одного намёка на решение :(
...
Рейтинг: 0 / 0
18.07.2015, 20:08:30
    #39010595
вадя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Фамилия И. О. из одного поля
Запрос+,

ну а если написать функцию? там можно логику более полную использовать.
...
Рейтинг: 0 / 0
18.07.2015, 20:26:46
    #39010597
vkle
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Фамилия И. О. из одного поля
Или уж, накрайняк, на клиенте разобрать...
...
Рейтинг: 0 / 0
18.07.2015, 22:28:21
    #39010627
Азер
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Фамилия И. О. из одного поля
Запрос+,

а что делать если там вместо ФИО будет прописано "Абдурахманов Полат Бюль-бюль Оглы" ?
...
Рейтинг: 0 / 0
19.07.2015, 02:36:53
    #39010648
Запрос+
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Фамилия И. О. из одного поля
Не знаю, что Вам делать, честное слово, я не специалист - мне бы сначала на свой вопрос ответ найти... :(
...
Рейтинг: 0 / 0
19.07.2015, 03:19:32
    #39010652
Фамилия И. О. из одного поля
Запрос+,

Сразу займись и его вопросом, если делаешь своим запросом что-то серьёзное. Оглы это обозначение отчества, и такого народу целые орды.
...
Рейтинг: 0 / 0
19.07.2015, 05:47:55
    #39010657
Запрос+
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Фамилия И. О. из одного поля
Ребята, признателен вам за заботу, спасибо, но не нужно ничего усложнять и предусматривать наперёд. Конечно, ваш опыт уже по инерции подсказывает вам, что аппетит у тех, кто пытает вас здесь тупыми вопросами и явно выраженными признаками активного слабоумия, неизбежно приходит во время еды, но у меня вообще не тот случай - мне нужно раз обработать то, что есть, и всё. Без всяких этих абстрактных "на будущее" и "а если...". У меня всего-навсего полтора десятка тысяч пользователей, и среди них нет ни одного (!) даже с обычной сдвоенной фамилией (типа Салтыкова-Щедрина), зато предостаточно (~8%) людей, которые не указали отчество. Т.е. в поле "fio" есть либо "Фамилия Имя Отчество", либо "Фамилия Имя". Всё. И никакого расширения не будет и не планируется - работаю сугубо со статичной информацией, которая не изменяется в принципе (на то есть особый регламент). Вот такие простые и лёгкие условия задачи.

Поэтому я и спросил - как мне обойти этот глюк. Не верю я, что СУБД, которая по возрасту чуть младше меня, не умеет такой элементарной вещи, о которой я спросил в своём первом сообщении...
...
Рейтинг: 0 / 0
19.07.2015, 08:25:11
    #39010662
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Фамилия И. О. из одного поля
хранить фамилию имя и отчество надо в разных полях.
...
Рейтинг: 0 / 0
19.07.2015, 08:38:04
    #39010663
Запрос+
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Фамилия И. О. из одного поля
Да, идея замечательная, благодарю, но иногда в жизни так бывает, что приходится работать именно с тем, что уже есть.
...
Рейтинг: 0 / 0
19.07.2015, 08:44:07
    #39010665
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Фамилия И. О. из одного поля
Запрос+Есть поле 'fio', в котором записи формата "Фамилия Имя Отчество". Да, поле одно.
Выдёргиваю из него данные и привожу их в формат "Фамилия И. О.":

Код: sql
1.
SELECT concat(SUBSTRING_INDEX(fio, ' ', 1), ' ', left(SUBSTRING_INDEX(SUBSTRING_INDEX(fio, ' ', 2), ' ', -1), 1), '. ', left(SUBSTRING_INDEX(SUBSTRING_INDEX(fio, ' ', -1), ' ', -1), 1), '.') fio FROM peoples



И всё вроде бы отлично, но если запись была сделана в формате "Петров Иван" (т.е. без отчества), то я в итоге получаю "Петров И. И." (т.е. вместо отчества повторно проставляется первая буква имени). Помогите, пожалуйста - как это исправить?

тебе надо написать функцию которая выделялся бы части ФИО и возвращала бы их.

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

оставшееся фамилия.

алгоритм естественно ориентирован на русские общеизвестные имена, и не будет работать во всех случаях. Но на 80% можно надеяться.
...
Рейтинг: 0 / 0
19.07.2015, 13:22:56
    #39010722
скукотища
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Фамилия И. О. из одного поля
> Запрос+,
> ...
> Т.е. в поле "fio" есть либо "Фамилия Имя Отчество", либо "Фамилия Имя". Всё. И никакого расширения не будет и не планируется ...
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
select
  case 
  when SUBSTRING_INDEX(fio, ' ', 2) = SUBSTRING_INDEX(fio, ' ', 3) then
    concat(left(fio, INSTR(fio, ' ') +1), '.')
  else
    concat(left(fio, INSTR(fio, ' ') +1), '. ', left(SUBSTRING_INDEX(fio, ' ', -1) ,1), '.')
  end t
from (
  select 'Фамилия Имя Отчество' fio union all
  select 'Петров Иван'
) a
...
Рейтинг: 0 / 0
19.07.2015, 13:55:41
    #39010728
Запрос+
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Фамилия И. О. из одного поля
скукотища , благодарю!!!

Чуть-чуть подпилил (убрал ненужное), в итоге получил именно то, что мне и требовалось.

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
SELECT
  CASE 
  WHEN SUBSTRING_INDEX(fio, ' ', 2) = SUBSTRING_INDEX(fio, ' ', 3) THEN
    CONCAT(LEFT(fio, INSTR(fio, ' ') +1), '.')
  ELSE
    CONCAT(LEFT(fio, INSTR(fio, ' ') +1), '. ', LEFT(SUBSTRING_INDEX(fio, ' ', -1) , 1), '.')
  END
FROM peoples





p.s.
Я верил в силу MySQL :)
...
Рейтинг: 0 / 0
19.07.2015, 16:59:46
    #39010766
Фамилия И. О. из одного поля
MasterZiv,

авторЛучше это делать по словарю имен, есть в словаре -значит имя. затем выделяем отчество. оно из оставшихся двух должно иметь суффиксы -вич, -вна , -ич , -ична

А не кажется ли Вам что, при таком выделении отчества на вас могут обидятся такие люди как Леонид Якубович или Роман Абрамович ведь для них это будут фамилии
...
Рейтинг: 0 / 0
20.07.2015, 00:05:31
    #39010880
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Фамилия И. О. из одного поля
Полат Бюль-Бюль ОглыMasterZiv,

авторЛучше это делать по словарю имен, есть в словаре -значит имя. затем выделяем отчество. оно из оставшихся двух должно иметь суффиксы -вич, -вна , -ич , -ична

А не кажется ли Вам что, при таком выделении отчества на вас могут обидятся такие люди как Леонид Якубович или Роман Абрамович ведь для них это будут фамилии

Алгоритм не идеален, да.
...
Рейтинг: 0 / 0
20.07.2015, 14:20:58
    #39011390
Alex_Ustinov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Фамилия И. О. из одного поля
могу вам рассказать простой пример из практики - программа за много млн.долл. (включая внедрение, конечно :-) ) при простом подходе к данному вопросу, т.е. ФИО в одном поле, получила обоснованный отрицательный отзыв при сдаче отчетности в пенс.фонд и налоговую, всего лишь после того, как на работу были приняты несколько работников с 4- 5- "словными" ФИО (вспомним хотя бы ПЕЛЕ-футболиста, Энтос Арантос де Насиментос). Так что пути избавления от несуразицы могут быть не решены тремя отдельными полями для Ф И О, а только добавлением .СокрНаме. с именно Сокращенным ФИО
...
Рейтинг: 0 / 0
20.07.2015, 17:34:47
    #39011628
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Фамилия И. О. из одного поля
Alex_Ustinovмогу вам рассказать простой пример из практики - программа за много млн.долл. (включая внедрение, конечно :-) ) при простом подходе к данному вопросу, т.е. ФИО в одном поле, получила обоснованный отрицательный отзыв при сдаче отчетности в пенс.фонд и налоговую, всего лишь после того, как на работу были приняты несколько работников с 4- 5- "словными" ФИО (вспомним хотя бы ПЕЛЕ-футболиста, Энтос Арантос де Насиментос). Так что пути избавления от несуразицы могут быть не решены тремя отдельными полями для Ф И О, а только добавлением .СокрНаме. с именно Сокращенным ФИО

Ну да, согласен, представление полного имени в виде трёх полей -- фамилии, имени и отчества -- это достаточно сильное упрощение,
далеко не все имена в мире под эту схему подходят.
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Фамилия И. О. из одного поля / 17 сообщений из 17, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]