проблема с разбором сроки

Zepp
Дата: 07.03.2007 10:08:40
есть таблица ОРГАНИЗАЦИИ в ней к примеру

select N
from 
(
select 'Савельев И.И' N from dual
union
select 'Григорьев А.С' from dual
union
select 'Петров М.Л' from dual
union
select 'Петрова Н.Н' from dual
union
select 'Петрова В.Д' from dual
union
select 'Савельев А.С' from dual
)

и есть таблица ДОКУМЕНТЫ, в которой помимо всякой инфы есть поле ПРИМЕЧАНИЕ типа VARCHAR2
длина значения не имеет

в этом поле записи типа

Оплата по сч. 27150 от 12.12.2006 жд/билеты, сбор Савельев, Петров.  (Казань-Екатеринбург) или
Оплата по сч. 26414 от 17.11.2006 жд/билеты, сбор Григорьев А.С. (Екатеринбург-Тюмень-Екатеринбург)

необходимо вытащить из ПРИМЕЧАНИЯ в ОТДЕЛЬНЫЕ(ую) колонки(у) фамилии если они есть в ОРГАНИЗАЦИЯХ
andrey_anonymous
Дата: 07.03.2007 10:15:55
Zepp
необходимо вытащить из ПРИМЕЧАНИЯ в ОТДЕЛЬНЫЕ(ую) колонки(у) фамилии если они есть в ОРГАНИЗАЦИЯХ


В общем случае задача автоматически не решется, но можно заметно облегчить жизнь, самовыразившись в стиле

select distinct o.N 
from ОРГАНИЗАЦИИ o, ДОКУМЕНТЫ d
where d.ПРИМЕЧАНИЕ like '%'||substr(o.N,1,instr(o.N,' '))||'%'
Zepp
Дата: 07.03.2007 10:21:33
немного уточню
мне необходимо :

столбец 1     |столбец 2| столбец 3
--------------------------------------
все примечание|ФАМИЛИЯ 1|ФАМИЛИЯ 2

ИЛИ

столбец 1     |столбец 2
--------------------------------------
все примечание|ФАМИЛИЯ1,ФАМИЛИЯ 2
andrey_anonymous
Дата: 07.03.2007 10:34:04
Zepp
немного уточню
мне необходимо :

Накрутите на соединение connect by + sys_connect_by_path
Zepp
Дата: 07.03.2007 10:39:36
andrey_anonymous
Zepp
немного уточню
мне необходимо :

Накрутите на соединение connect by + sys_connect_by_path


ок попробую
Elic
Дата: 07.03.2007 10:47:20
with ФИО as
( select 'Савельев И.И' ФИО from dual union all
  select 'Григорьев А.С'  from dual union all
  select 'Петров М.Л'     from dual union all
  select 'Петрова Н.Н'    from dual union all
  select 'Петрова В.Д'    from dual union all
  select 'Савельев А.С'   from dual
),
ДОКУМЕНТЫ as
( select 'Оплата по сч. 27150 от 12.12.2006 жд/билеты, сбор Савельев, Петрова.  (Казань-Екатеринбург)' as ПРИМЕЧАНИЕ from dual union all
  select 'Оплата по сч. 26414 от 17.11.2006 жд/билеты, сбор Григорьев А.С. (Екатеринбург-Тюмень-Екатеринбург)' from dual
)
select * from ФИО, ДОКУМЕНТЫ
  where regexp_like(ПРИМЕЧАНИЕ, '\W' || substr(ФИО, 1, instr(ФИО, ' ') - 1) || '\W')
;

ФИО           ПРИМЕЧАНИЕ
------------- ---------------------------------------------------------------------------------------------------
Савельев И.И  Оплата по сч. 27150 от 12.12.2006 жд/билеты, сбор Савельев, Петрова.  (Казань-Екатеринбург)
Петрова Н.Н   Оплата по сч. 27150 от 12.12.2006 жд/билеты, сбор Савельев, Петрова.  (Казань-Екатеринбург)
Петрова В.Д   Оплата по сч. 27150 от 12.12.2006 жд/билеты, сбор Савельев, Петрова.  (Казань-Екатеринбург)
Савельев А.С  Оплата по сч. 27150 от 12.12.2006 жд/билеты, сбор Савельев, Петрова.  (Казань-Екатеринбург)
Григорьев А.С Оплата по сч. 26414 от 17.11.2006 жд/билеты, сбор Григорьев А.С. (Екатеринбург-Тюмень-Екатеринбург)

5 rows selected.
+ RTFM ТОП №14
Но даже так (10g) результаты не впечатляют, а с простым like-ом ложных срабатываний будет ещё больше. Так что модель данных - в топку
Zepp
Дата: 07.03.2007 12:43:57
Elic
Так что модель данных - в топку


что правда, то правда. Но есть одно НО, не я модель разрабатывал, мне просто приходится с этим Г.... работать, и делать какие-никакие отчеты
AlexOI
Дата: 07.03.2007 14:13:12
Для такой задачи лучше использовать полнотекстовые индексы. Правда без использования RCO и они не помогут при опечатках, разных падежах и т.д.
orawish
Дата: 07.03.2007 14:17:49
AlexOI
Для такой задачи лучше использовать полнотекстовые индексы. Правда без использования RCO и они не помогут при опечатках, разных падежах и т.д.

Имхо, таки - модель в топку. А на переходный процесс - бригаду для разбора завалов (с лопатами и вилами :)
AlexOI
Дата: 07.03.2007 14:19:00
orawish
AlexOI
Для такой задачи лучше использовать полнотекстовые индексы. Правда без использования RCO и они не помогут при опечатках, разных падежах и т.д.

Имхо, таки - модель в топку. А на переходный процесс - бригаду для разбора завалов (с лопатами и вилами :)


В топку, так в топку. :-)