Гость
Map
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Как разделить ФИО на Ф, И, О? / 25 сообщений из 48, страница 1 из 2
15.04.2009, 08:28
    #35932104
Павел Гужанов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как разделить ФИО на Ф, И, О?
В поле таблицы содержится ФИО человека. Мне нужно в результате SQL запроса получить отдельные поля Фамилия, Имя, Отчество. Как это сделать?
...
Рейтинг: 0 / 0
15.04.2009, 08:31
    #35932108
semenar
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как разделить ФИО на Ф, И, О?
Решается стандартно instr+substr.
...
Рейтинг: 0 / 0
15.04.2009, 08:34
    #35932110
semenar
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как разделить ФИО на Ф, И, О?
когда-то давно писал:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
FUNCTION RETURN_FIO (C_VALUE VARCHAR2,N_CHECK NUMBER) RETURN VARCHAR2 IS
  V_VAR NUMBER;
  C_OUT VARCHAR2( 130 ) DEFAULT NULL;
  BEGIN
   IF N_CHECK =  1  THEN
    C_OUT := SUBSTR(C_VALUE, 1 ,INSTR(C_VALUE,' ')); --ФАМИЛИЯ--
   END IF;
   IF N_CHECK =  2  THEN
    C_OUT := SUBSTR(C_VALUE,INSTR(C_VALUE,' ', 1 , 1 )+ 1 ,INSTR(C_VALUE,' ', 1 , 2 )-INSTR(C_VALUE,' ', 1 , 1 )- 1 ); --ИМЯ--
   END IF;
   IF N_CHECK =  3  THEN
    C_OUT := SUBSTR(C_VALUE,INSTR(C_VALUE,' ', 1 , 2 )+ 1 );  --ОТЧЕСТВО--
   END IF;
   RETURN TRIM(C_OUT);
  END;
...
Рейтинг: 0 / 0
15.04.2009, 08:41
    #35932115
andreymx
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как разделить ФИО на Ф, И, О?
Для любителей программно разбивать строку ФИО на фамилию, имя и отчество пример:
"Ханмамедова Дуня Тофик гизы"
или
"Ханмамедова Дуня Тофик-гизы"

- кто из них как пишет.
...
Рейтинг: 0 / 0
15.04.2009, 08:48
    #35932119
SQLap
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как разделить ФИО на Ф, И, О?
Павел ГужановВ поле таблицы содержится ФИО человека. Мне нужно в результате SQL запроса получить отдельные поля Фамилия, Имя, Отчество. Как это сделать?

Код: plaintext
1.
2.
3.
select substr('Иванов Иван Иванович',  1 , instr('Иванов Иван Иванович', ' ')),
       substr('Иванов Иван Иванович', instr('Иванов Иван Иванович', ' ', 2 ), instr('Иванов Иван Иванович', ' ', 2 ) - 1 ),
       substr('Иванов Иван Иванович', -instr('Иванов Иван Иванович', ' ',  2 ) - 1 )
 from dual

на Тофик газах не работает правда(
...
Рейтинг: 0 / 0
15.04.2009, 09:24
    #35932172
Павел Гужанов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как разделить ФИО на Ф, И, О?
Спасибо
...
Рейтинг: 0 / 0
15.04.2009, 09:42
    #35932207
andreymx
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как разделить ФИО на Ф, И, О?
Row#FAM||''||IMA||''||OTH1Абасов Фархад Фикрет-Оглы2Аблязов Рустем 3Бахшалиев Афик Зульфали оглы4Булина-Зыкина Елена Андреевна5Габибов Арзу Камил-оглы6Зейналов Эльмар Джамал_оглы7Исмаилов Заур Абульфат_оглы8Мамедов Эльдар Насиб_оглы9Рагимов Рауф Афис-оглы10Рагимов Рафик Афис-оглы11Самофалов-Зорин Артем Маркович12Сариев Махаббат Эльдар-Оглы13Тагиев Рагим Надир оглы14Тульнова Гюльнара Ахмедага кизы15Ханмамедова Дуня Тофик-гизы16Эль_гуэссаб Любовь Валерьевнакстати, насколько я понял, "Эль_гуэссаб" - фамилия из двух слов, просто всё-таки пришлось вставить "_"
...
Рейтинг: 0 / 0
15.04.2009, 09:47
    #35932223
SQLap
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как разделить ФИО на Ф, И, О?
andreymxRow#tFAM||''||IMA||''||OTH1tАбасов Фархад Фикрет-Оглы2tАблязов Рустем 3tБахшалиев Афик Зульфали оглы4tБулина-Зыкина Елена Андреевна5tГабибов Арзу Камил-оглы6tЗейналов Эльмар Джамал_оглы7tИсмаилов Заур Абульфат_оглы8tМамедов Эльдар Насиб_оглы9tРагимов Рауф Афис-оглы10tРагимов Рафик Афис-оглы11tСамофалов-Зорин Артем Маркович12tСариев Махаббат Эльдар-Оглы13tТагиев Рагим Надир оглы14tТульнова Гюльнара Ахмедага кизы15tХанмамедова Дуня Тофик-гизы16tЭль_гуэссаб Любовь Валерьевнакстати, насколько я понял, "Эль_гуэссаб" - фамилия из двух слов, просто всё-таки пришлось вставить "_"

Мне почему-то в таких случаях вспоминается голладский футболист Ян Венегоор оф Хесселинк)
...
Рейтинг: 0 / 0
15.04.2009, 09:48
    #35932227
SQLap
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как разделить ФИО на Ф, И, О?
А вообще в шикарных системах для хранения ФИО отводится 4 поля минимум.
ФИО, Ф, И и О. Некоторые еще и на падежи не скупятся
...
Рейтинг: 0 / 0
15.04.2009, 09:52
    #35932239
__vvp_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как разделить ФИО на Ф, И, О?
У нас есть работник Альвард Анвар Али Абдо
И где у него имя, фамилия, отчество?
...
Рейтинг: 0 / 0
15.04.2009, 10:06
    #35932274
SQLap
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как разделить ФИО на Ф, И, О?
__vvp_У нас есть работник Альвард Анвар Али Абдо
И где у него имя, фамилия, отчество?

Во блин, понаехали...
Хотя... Если по дефолту взять пробел как делимитер, то уже кадрам придется решать Анвар-Али он или Али-Абдо
...
Рейтинг: 0 / 0
15.04.2009, 10:08
    #35932285
Dmitry Arefiev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как разделить ФИО на Ф, И, О?
ФИО это СССРное, у других товарищей может быть ИФ, И1И2И3...ИNФ,
И1И2И3...ИN и прочие вариации :)
...
Рейтинг: 0 / 0
15.04.2009, 10:09
    #35932287
stax..
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как разделить ФИО на Ф, И, О?
Павел Гужанов,

Бендер Остап Сулейман -Берта-Мария Ибрагимович
...
Рейтинг: 0 / 0
15.04.2009, 10:34
    #35932366
tru55
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как разделить ФИО на Ф, И, О?
stax..Павел Гужанов,

Бендер Остап Сулейман -Берта-Мария Ибрагимович

Да, я тоже его сразу вспоминаю в подобных случаях :)
Только мне почему-то казалось, что ...Мария Бендер-бей :)
...
Рейтинг: 0 / 0
15.04.2009, 10:41
    #35932394
Mexico
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как разделить ФИО на Ф, И, О?
и как на счеть двойная фамилия или имя как в испано-говорящи страна?

кстати не навижу constraint в поле "Отчество" NOT NULL :)
----------------------------------------------
Sorry, my Russian is not as good as my Spanish
...
Рейтинг: 0 / 0
15.04.2009, 10:46
    #35932413
dmidek
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как разделить ФИО на Ф, И, О?
Mexicoи как на счеть двойная фамилия или имя как в испано-говорящи страна?

кстати не навижу constraint в поле "Отчество" NOT NULL :)


Фамилия ? Хансен
Имя ? Билл
Отчество ? Я не знаю....у него нет отчества
(С) Осенний марафон
...
Рейтинг: 0 / 0
15.04.2009, 10:48
    #35932423
SQLap
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как разделить ФИО на Ф, И, О?
dmidekMexicoи как на счеть двойная фамилия или имя как в испано-говорящи страна?

кстати не навижу constraint в поле "Отчество" NOT NULL :)


Фамилия ? Хансен
Имя ? Билл
Отчество ? Я не знаю....у него нет отчества
(С) Осенний марафон


Кадровики придумают)) Как обойти констрейнт)))
...
Рейтинг: 0 / 0
15.04.2009, 11:18
    #35932550
Mexico
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как разделить ФИО на Ф, И, О?
SQLapdmidekMexicoи как на счеть двойная фамилия или имя как в испано-говорящи страна?

кстати не навижу constraint в поле "Отчество" NOT NULL :)


Фамилия ? Хансен
Имя ? Билл
Отчество ? Я не знаю....у него нет отчества
(С) Осенний марафон


Кадровики придумают)) Как обойти констрейнт)))

Главное, в Домовой книги у меня : Отчество : НЕТ, думаю был лучше Нетович!!!
...
Рейтинг: 0 / 0
15.04.2009, 11:22
    #35932564
-=APS=-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как разделить ФИО на Ф, И, О?
__vvp_У нас есть работник Альвард Анвар Али Абдо
И где у него имя, фамилия, отчество?
Аналогичная ситуация.. Принимающая система когда-то была заточена под 3 реквизита: фамилия, имя, отчество. А поступают данные в одном поле в произвольном порядке и часто в реальной жизни приходится регистрировать для обслуживания людей, у которых с ФИО не все так однозначно. Например, Dong Canh Trung (Вьетнам), или Aza Ocana Emiliano de la Cruz (Испания) и т.п. Правда, бухгалтерия поднялась на более высокий уровень абстракции и заявила, что им пофигу, что там имя, а что - фамилия, и где они хранятся в БД. Для них важно, чтобы реквизиты в платежное поручение попадали без искажений :)
...
Рейтинг: 0 / 0
15.04.2009, 11:44
    #35932683
Dmitry Arefiev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как разделить ФИО на Ф, И, О?
-=APS=-Для них важно, чтобы реквизиты в платежное поручение попадали без искажений :)
Главное, что бы совпадало с удостоверяющим личность документом и прочими
государственными записями :)
...
Рейтинг: 0 / 0
15.04.2009, 12:32
    #35932902
citrix
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как разделить ФИО на Ф, И, О?
Сразу вспомнилась знакомая девочка Марина Елена Николаевна... в фамилии Марина ударение на последний слог:-)

Нам нужен мир. Желательно весь.
...
Рейтинг: 0 / 0
15.04.2009, 12:42
    #35932959
valerytin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как разделить ФИО на Ф, И, О?
Код: plaintext
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.
function getw(
-- возврат no-го слова из строки с параметрическим списком разделителей
-- valerytin, hexcept@narod.ru, apr-2006
  p_str varchar2, -- входящая строка
  p_num pls_integer:= 1 , -- слово по счету: >0 - от начала, <0 - с конца
  fstr varchar2:= -- список "пробелов" по умолчанию
   ' ~!@#$%^*()+=;:?,./\|[]{}"<>-_№'||chr( 9 )||chr( 10 )||chr( 13 )||chr( 38 )||chr( 39 )||
   chr( 147 )||chr( 148 )||chr( 171 )||chr( 187 )||chr( 96 )
 ) return varchar2 is
 l_str varchar2( 2000 );
 l_dev char:=chr( 7 ); -- chr(7): возможность не указывать пробел в fstr
begin
 if p_str is null or p_num= 0  then return null; end if;
 l_str:=
  ltrim(translate(p_str,l_dev||fstr,rpad(l_dev, 80 ,l_dev)),l_dev);
 if l_str is null then return null; end if;
 if p_num> 0  then -- если ищем от начала строки
  l_str:=ltrim(l_str,l_dev)||l_dev;
  for i in  2 ..p_num loop
   l_str:=ltrim(substr(l_str,instr(l_str,l_dev)),l_dev);
  end loop;
  return substr(l_str, 1 ,instr(l_str,l_dev)- 1 );
 else -- ищем с конца
  l_str:=l_dev||rtrim(l_str,l_dev);
  for i in  2 ..-p_num loop
   l_str:=rtrim(substr(l_str, 1 ,instr(l_str,l_dev,- 1 )),l_dev);
  end loop;
  return substr(l_str,instr(l_str,l_dev,- 1 )+ 1 );
 end if;
 return null;
end getw;
--------------------------------------------------------------------------------
select
 getw(s, 1 ,' ') fa,
 getw(s, 2 ,' ') im,
 decode(getw(s, 2 ,' '),null,null,
  decode(getw(s, 3 ,' '),null,null,
  trim(substr(' '||s||' ',instr(' '||s||' ',' '||getw(s, 3 ,' ')||' '))))) ot
from
(
 select '      Абасов Фархад Фикрет-Оглы' s from dual union all
 select 'Аблязов Рустем ' s from dual union all
 select 'Бахшалиев Афик Зульфали оглы' s from dual union all
 select 'Булина-Зыкина   Елена Андреевна          ' s from dual union all
 select 'Эль_гуэссаб Любовь Валерьевна' s from dual union all
 select 'Али-Абдо' s from dual union all
 select 'Фамилиев Али-Абдо' s from dual union all
 select 'Фамилиев Али-Абдо Отчествевич' s from dual union all
 select 'Фамилиев Али-Абдо Отчествевич + бла-бла бла' s from dual union all
 select 'Бендер Остап Сулейман -Берта-Мария Ибрагимович ' s from dual
)
...
Рейтинг: 0 / 0
15.04.2009, 13:26
    #35933146
SQL*Plus
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как разделить ФИО на Ф, И, О?
SQLap
Код: plaintext
1.
2.
3.
select substr('Иванов Иван Иванович',  1 , instr('Иванов Иван Иванович', ' ')),
       substr('Иванов Иван Иванович', instr('Иванов Иван Иванович', ' ', 2 ), instr('Иванов Иван Иванович', ' ', 2 ) - 1 ),
       substr('Иванов Иван Иванович', -instr('Иванов Иван Иванович', ' ',  2 ) - 1 )
 from dual

на Тофик газах не работает правда(
Оно и не "на Тофик газах" работает только на 1/3... :-)
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
select '"'||substr('Иванов Иван Иванович',  1 , instr('Иванов Иван Иванович', ' '))||'"' AS f,
       '"'||substr('Иванов Иван Иванович', instr('Иванов Иван Иванович', ' ', 2 ), instr('Иванов Иван Иванович', ' ', 2 ) - 1 )||'"' AS i,
       '"'||substr('Иванов Иван Иванович', -instr('Иванов Иван Иванович', ' ',  2 ) - 1 )||'"' AS o
from dual

F         I        O
--------- -------- ----------
"Иванов " " Иван " "Иванович"
       ^   ^    ^
ТщательнЕе надо кодировать...
...
Рейтинг: 0 / 0
15.04.2009, 13:39
    #35933211
SQLap
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как разделить ФИО на Ф, И, О?
SQL*Plus
ТщательнЕе надо кодировать...

Согласен, повинен смерти
Код: plaintext
1.
2.
3.
select substr('Иванов Иван Иванович',  1 , instr('Иванов Иван Иванович', ' ') - 1 ) F,
       substr('Иванов Иван Иванович', instr('Иванов Иван Иванович', ' ', 2 ) +  1 , instr('Иванов Иван Иванович', ' ', 2 ) - 3 ) I,
       substr('Иванов Иван Иванович', -instr('Иванов Иван Иванович', ' ',  2 ) - 1 ) O
 from dual
...
Рейтинг: 0 / 0
15.04.2009, 16:58
    #35934112
Alexey I Sereda
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как разделить ФИО на Ф, И, О?
select 'Фамилия Имя Отчество'
,regexp_replace('Фамилия Имя Отчество','(.*) (.*) (.*)','\1') as f
,regexp_replace('Фамилия Имя Отчество','(.*) (.*) (.*)','\2') as i
,regexp_replace('Фамилия Имя Отчество','(.*) (.*) (.*)','\3')as o
from dual

Oracle 10.2.0.2 (в 9.2.0.5 говорят тоже работало)
По поводу регулярных выражений хорошая и небольшая статья:
http://www.interface.ru/home.asp?artId=19744
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Как разделить ФИО на Ф, И, О? / 25 сообщений из 48, страница 1 из 2
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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