powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Фамилия И. О. из одного поля
17 сообщений из 17, страница 1 из 1
Фамилия И. О. из одного поля
    #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
Фамилия И. О. из одного поля
    #39010576
Запрос+
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Неужели то, что мне нужно, в принципе нереально? Обложился мануалами, разобрал уже почти полсотни примеров, но за 4 часа ни одного намёка на решение :(
...
Рейтинг: 0 / 0
Фамилия И. О. из одного поля
    #39010595
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Запрос+,

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

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

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

Поэтому я и спросил - как мне обойти этот глюк. Не верю я, что СУБД, которая по возрасту чуть младше меня, не умеет такой элементарной вещи, о которой я спросил в своём первом сообщении...
...
Рейтинг: 0 / 0
Фамилия И. О. из одного поля
    #39010662
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
хранить фамилию имя и отчество надо в разных полях.
...
Рейтинг: 0 / 0
Фамилия И. О. из одного поля
    #39010663
Запрос+
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да, идея замечательная, благодарю, но иногда в жизни так бывает, что приходится работать именно с тем, что уже есть.
...
Рейтинг: 0 / 0
Фамилия И. О. из одного поля
    #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
Фамилия И. О. из одного поля
    #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
Фамилия И. О. из одного поля
    #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
Фамилия И. О. из одного поля
    #39010766
MasterZiv,

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

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

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

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

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

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


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