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

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

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

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

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

3 Проход Если слов 4 и больше то все лишние слова в имя (чаще всего двойные фамилии через дефис) и далее ручной контроль.
...
Рейтинг: 0 / 0
23.08.2019, 10:42
    #39853148
Vlad F
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Из одного поля FIO получить три
Rphoenix,
1) Если совсем прижмёт, можно найти UDF-библиотеку RFunc, или что то из ее более современных клонов, и воспользоваться ее функциями WordCount(), WordNum() и т.д.
1) Если версия сервера >= 3, можно переписать эти функции на SQL в виде SDF, там всего то в каждой будет по десятку строк, я что то такое делал.
...
Рейтинг: 0 / 0
23.08.2019, 11:23
    #39853172
KreatorXXI
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Из одного поля FIO получить три
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
23.08.2019, 12:31
    #39853210
WildSery
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Из одного поля FIO получить три
dvim1 Проход. Те у кого в ФИО есть 2 слова.
Заполняем из них Имя ФамилиюА почему не Фамилию Имя?
...
Рейтинг: 0 / 0
26.08.2019, 18:03
    #39853844
Старый плюшевый мишка
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Из одного поля FIO получить три
WildSerydvim1 Проход. Те у кого в ФИО есть 2 слова.
Заполняем из них Имя ФамилиюА почему не Фамилию Имя?

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

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

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

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


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


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

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

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

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


А ещё кажется мне, что это топорное задание для лабораторки :)
...
Рейтинг: 0 / 0
28.08.2019, 12:27
    #39854572
zeon11
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Из одного поля FIO получить три
Иногда приходится и с чужими БД работать.
Код: 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
04.10.2019, 17:18
    #39871788
Василий 2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Из одного поля FIO получить три
Тоже довелось столкнуться с такой траблой. Разбил разово программой, намотал на ус, что хранить ФИО надо по отдельности.
Автоматом разбивал, кстати, только поля из трех составляющих, все нестандартные прогонял вручную (всякие Пхан Чунги).
...
Рейтинг: 0 / 0
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Из одного поля FIO получить три / 14 сообщений из 14, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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