powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Из одного поля FIO получить три
14 сообщений из 14, страница 1 из 1
Из одного поля FIO получить три
    #39852988
Rphoenix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте, ни как не могу сообразить, в базе есть таблица, у нее одно поле FIO.
Мне нужно разбить его на 3 (F I O). Как можно это сделать? До пробелов считать?
Можете написать, как через select (например) в таблице students в поле FIO получить AS F, AS I, AS O....
...
Рейтинг: 0 / 0
Из одного поля FIO получить три
    #39853004
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RphoenixКак можно это сделать?

В общем случае - никак. "Фарш невозможно прокрутить назад."
Дай по голове тому, кто сделал такую БД и посади делить одно поле на три ручками. Чтоб
запомнил как делать не надо.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Из одного поля FIO получить три
    #39853011
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Rphoenix, хм... Интересно взглянуть на алгоритм, способный правильно разобрать, к примеру, фот такое ФИО:
Пабло Диего Хозе Франциско де Паула Хуан Непомукено Криспин Криспиано де ла Сантисима Тринидад Руиз и Пикассо
...
Рейтинг: 0 / 0
Из одного поля FIO получить три
    #39853029
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RphoenixМожете написать, как через select (например) в таблице students в поле FIO получить AS F, AS I, AS O....Если простейший случай через пробелы (и они всегда есть) - теоретически можно обойтись substring и position.
Но это - вряд ли.
Как минимум придется execute block и анализировать данные лучше.

P.S. Лучше добавить в таблицу 3 поля и провести это операцию один раз. На будущее.
...
Рейтинг: 0 / 0
Из одного поля FIO получить три
    #39853119
dedRasta
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
YuRock,
У меня при получении данных из старой БД была эта проблема, но нюансы были только с товарищами с юга, у которых либо вообще не было отчества, либо оно было сложносочиненное. Но как-то разгреб.
...
Рейтинг: 0 / 0
Из одного поля FIO получить три
    #39853124
MikeDD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Rphoenix, берешь где-нибудь справочник имен и фамилий, загоняешь его в свою БД и на его основе парсишь свои данные. А то что останется (опечатки, экзотические имена и т.п.) придется разгребать вручную.
...
Рейтинг: 0 / 0
Из одного поля FIO получить три
    #39853128
WildSery
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У меня есть знакомый, Александр Петрович Кузьмич (беларус). У них много таких фамилий. И разгребать, где фамилия, где отчество, придётся вручную.

Даже без сложносочинённых ничего не выйдет - FIO может оказаться IOF
...
Рейтинг: 0 / 0
Из одного поля FIO получить три
    #39853144
dvim
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Rphoenix,

как я решал подобную задачу
1 Проход. Те у кого в ФИО есть 2 слова.
Заполняем из них Имя Фамилию
2 Проход Те у кого 3 слова - Заполняем три поля - ФИО

3 Проход Если слов 4 и больше то все лишние слова в имя (чаще всего двойные фамилии через дефис) и далее ручной контроль.
...
Рейтинг: 0 / 0
Из одного поля FIO получить три
    #39853148
Vlad F
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Rphoenix,
1) Если совсем прижмёт, можно найти UDF-библиотеку RFunc, или что то из ее более современных клонов, и воспользоваться ее функциями WordCount(), WordNum() и т.д.
1) Если версия сервера >= 3, можно переписать эти функции на SQL в виде SDF, там всего то в каждой будет по десятку строк, я что то такое делал.
...
Рейтинг: 0 / 0
Из одного поля FIO получить три
    #39853172
KreatorXXI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Rphoenix,

если данные ровные, то можно по-простому:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
with q as (
  select a.family || ' ' || a.name || ' ' || a.otch as fio
  from sotr a
  where a.id_slug=91
)
select substring(q.fio from 1 for (position(' ', q.fio, 1) - 1)) as family,
       substring(q.fio from (position(' ', q.fio, 1) + 1) for (position(' ', q.fio, position(' ', q.fio, 1) + 1) - (position(' ', q.fio, 1) + 1))) as name1,
       substring(q.fio from (position(' ', q.fio, position(' ', q.fio, 1) + 1))) as name2,
       q.fio as fio
from q
order by 1, 2, 3
...
Рейтинг: 0 / 0
Из одного поля FIO получить три
    #39853210
WildSery
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dvim1 Проход. Те у кого в ФИО есть 2 слова.
Заполняем из них Имя ФамилиюА почему не Фамилию Имя?
...
Рейтинг: 0 / 0
Из одного поля FIO получить три
    #39853844
Фотография Старый плюшевый мишка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WildSerydvim1 Проход. Те у кого в ФИО есть 2 слова.
Заполняем из них Имя ФамилиюА почему не Фамилию Имя?

Я тоже задумался. Две записи:

Александр Невский
Невский Александр

И где в них фамилия?

А Владимирович - это отчество или фамилия?


- Рюрикович я...
- Это в смысле из нотариальной конторы "РюрикОвич и сыновья?"


rdb_devRphoenix, хм... Интересно взглянуть на алгоритм, способный правильно разобрать, к примеру, фот такое ФИО:
Пабло Диего Хозе Франциско де Паула Хуан Непомукено Криспин Криспиано де ла Сантисима Тринидад Руиз и Пикассо

Вообще-то это даже для Испании патологическая редкость. У них есть такой обычай - когда родится мальчик, набрать ведро кипятку и не глядя выплеснуть в окно. Что с улицы крикнут, так мальчика и назовут. Поэтому у них все Хулио и Педры.

Такшта лучший совет

Dimitry SibiryakovДай по голове тому, кто сделал такую БД и посади делить одно поле на три ручками. Чтоб
запомнил как делать не надо.


А ещё кажется мне, что это топорное задание для лабораторки :)
...
Рейтинг: 0 / 0
Из одного поля FIO получить три
    #39854572
zeon11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Иногда приходится и с чужими БД работать.
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
SET TERM ^ ;

create or alter procedure AIS_PARSE_FIO (
    FIO varchar(50))
returns (
    FAM varchar(50),
    NAME varchar(50),
    PATRO varchar(50))
as
declare variable P1 integer;
declare variable L integer;
declare variable P2 integer;
declare variable IO varchar(50);
begin
     l=char_length (:fio);
     if ((:l=0) or (:fio is null)) then begin
                                          fam='';
                                          name='';
                                          patro='';
                                          suspend;
                                        end
    else begin
           p1=position (' ', :fio);
           if (:p1=0) then begin
                              fam=:fio;
                              name='';
                              patro='';
                              suspend;
                           end
                       else begin
                             fam=trim(substring(:fio from 1 for :p1));

                             io=trim(substring(:fio from :p1 for :l));

                             p2=position (' ', :io);

                             if (:p2=0) then begin
                                               name=:io;
                                               patro='';
                                             end
                                        else begin

                                         name=trim(substring(:io from 1 for :p2));
                                              l=char_length (:io);
                                 patro=trim(substring(:io from :p2 for :l));
                                 end
                              suspend;
                            end

     end
--   end
end^

SET TERM ; ^

COMMENT ON PROCEDURE AIS_PARSE_FIO IS
'Распарсить ФИО на составляющие';
...
Рейтинг: 0 / 0
Из одного поля FIO получить три
    #39871788
Василий 2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тоже довелось столкнуться с такой траблой. Разбил разово программой, намотал на ус, что хранить ФИО надо по отдельности.
Автоматом разбивал, кстати, только поля из трех составляющих, все нестандартные прогонял вручную (всякие Пхан Чунги).
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Из одного поля FIO получить три
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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