Загрузка данных
1
with t as (
select distinct naimen,
translate(upper(naimen), 'ЁABCEHKMOPTXY', 'ЕАВСЕНКМОРТХУ') as u
from sh.uch_vse
where naimen is not null
)
select naimen as "Наименование"
from t
where regexp_like(u, '(^|[^А-Я])(ООО|ОАО|ЗАО|ПАО|АО|НАО|ТОО|ФГУП|ГУП|МУП|НОУ|АНО|НКО|АКБ|КБ|АБ|АК|ИНК|ЛТД|ЛИМИТЕД|ГМБХ)([^А-Я]|$)')
or regexp_like(u, 'ОБЩЕСТВ|ТОВАРИЩЕСТВ|ПРЕДПРИЯТИ|УЧРЕЖДЕНИ|ФОНД|ОРГАНИЗАЦ|ОБЪЕДИНЕНИ|АССОЦИАЦ|СОЮЗ|ПАРТНЕРСТВ|КОМПАНИ|КООПЕРАТИВ')
or regexp_like(upper(naimen), '(^|[^A-Z])(LLC|LTD|INC|GMBH|CORP|LIMITED|JSC)([^A-Z]|$)')
or (regexp_like(u, '["«»“”'']')
and not regexp_like(u, '(^|[^А-Я])(ИП|ПБОЮЛ|ЧП)([^А-Я]|$)|ПРЕДПРИНИМАТЕЛ'))
order by 1;
обратный
with t as (
select distinct naimen,
translate(upper(naimen), 'ЁABCEHKMOPTXY', 'ЕАВСЕНКМОРТХУ') as u
from sh.uch_vse
where naimen is not null
)
select naimen as "Наименование"
from t
where not (
regexp_like(u, '(^|[^А-Я])(ООО|ОАО|ЗАО|ПАО|АО|НАО|ТОО|ФГУП|ГУП|МУП|НОУ|АНО|НКО|АКБ|КБ|АБ|АК|ИНК|ЛТД|ЛИМИТЕД|ГМБХ)([^А-Я]|$)')
or regexp_like(u, 'ОБЩЕСТВ|ТОВАРИЩЕСТВ|ПРЕДПРИЯТИ|УЧРЕЖДЕНИ|ФОНД|ОРГАНИЗАЦ|ОБЪЕДИНЕНИ|АССОЦИАЦ|СОЮЗ|ПАРТНЕРСТВ|КОМПАНИ|КООПЕРАТИВ')
or regexp_like(upper(naimen), '(^|[^A-Z])(LLC|LTD|INC|GMBH|CORP|LIMITED|JSC)([^A-Z]|$)')
or (regexp_like(u, '["«»“”'']')
and not regexp_like(u, '(^|[^А-Я])(ИП|ПБОЮЛ|ЧП)([^А-Я]|$)|ПРЕДПРИНИМАТЕЛ'))
)
order by 1;
справочник:
begin
execute immediate 'drop table spr_gorod purge';
exception
when others then null;
end;
/
create table spr_gorod (
id number generated always as identity primary key,
name varchar2(100) not null unique
);
insert into spr_gorod (name)
with src as (
select length(trim(naimen)) as len,
regexp_replace(translate(upper(trim(naimen)), 'ЁABCEHKMOPTXY', 'ЕАВСЕНКМОРТХУ'),
'[[:space:]]+', ' ') as u
from sh.uch_vse
where naimen is not null
),
ext as (
select len, u,
regexp_substr(u,
'(^|[^А-Я])Г(ОРОД|ОР)?[. ]+(((НИЖНИЙ|НИЖНЕМ|ВЕЛИКИЙ|ВЕЛИКОМ|ВЕЛИКИЕ|НОВЫЙ|СТАРЫЙ|НАБЕРЕЖНЫЕ|МИНЕРАЛЬНЫЕ|СЕРГИЕВ|БЕЛАЯ|МАЛАЯ|БОЛЬШОЙ|СОСНОВЫЙ|ЗАПАДНАЯ) )?[А-Я]+(-[А-Я]+)*)',
1, 1, null, 3) as city
from src
),
norm as (
select regexp_replace(city, '(СК|ЦК|ОВ|ГРАД|ГОРОД|БУРГ|ОРГ|РОГ)[АУЕ]$', '\1') as city
from ext
where length(city) >= 3
and not (len >= 50 and u like '%' || city)
),
fix as (
select regexp_substr(column_value, '[^=]+', 1, 1) as bad,
regexp_substr(column_value, '[^=]+', 1, 2) as good
from table(sys.odcivarchar2list(
'МОС=МОСКВА', 'МОСК=МОСКВА',
'САНКТ=САНКТ-ПЕТЕРБУРГ', 'САНКТ-ПЕТЕР=САНКТ-ПЕТЕРБУРГ', 'САНКТ-ПЕТЕРБУГ=САНКТ-ПЕТЕРБУРГ',
'С-ПЕТЕРБУРГ=САНКТ-ПЕТЕРБУРГ', 'С-ПБ=САНКТ-ПЕТЕРБУРГ', 'СПБ=САНКТ-ПЕТЕРБУРГ',
'РОСТОВ-НА=РОСТОВ-НА-ДОНУ', 'РОСТОВ=РОСТОВ-НА-ДОНУ','БОЛЬШОЙ=БОЛЬШОЙ КАМЕНЬ', 'РОСТОВА-НА-ДОНУ=РОСТОВ-НА-ДОНУ',
'НОВОСИБ=НОВОСИБИРСК', 'НАБ=НАБЕРЕЖНЫЕ ЧЕЛНЫ', 'СЫЗ=СЫЗРАНЬ', 'ПОДОЛ=ПОДОЛЬСК',
'ТЮМЕН=ТЮМЕНЬ', 'ОРЕХОВО=ОРЕХОВО-ЗУЕВО', 'В-ЛУКИ=ВЕЛИКИЕ ЛУКИ', 'ВЛ-КА=ВЛАДИВОСТОК',
'ВЕЛИКОМ НОВГОРОД=ВЕЛИКИЙ НОВГОРОД', 'НИЖНЕМ НОВГОРОД=НИЖНИЙ НОВГОРОД',
'КАЗАИЬ=КАЗАНЬ', 'КИРОВО-ЧЕПЕЧК=КИРОВО-ЧЕПЕЦК', 'АРАМИЛЬ-ТРАНЗИТНЫЙ=АРАМИЛЬ',
'ЧЕРЕПОВЦЕ=ЧЕРЕПОВЕЦ', 'СТАВРОПОЛЕ=СТАВРОПОЛЬ', 'ЩЕРБИНКЕ=ЩЕРБИНКА', 'СУРГУТЕ=СУРГУТ',
'МУРОМЕ=МУРОМ', 'СЕБЕЖЕ=СЕБЕЖ', 'ЭНГЕЛЬСЕ=ЭНГЕЛЬС', 'ЮБИЛЕЙНОГО=ЮБИЛЕЙНЫЙ',
'ЖУКОВСА=ЖУКОВСКИЙ', 'НОВОВОРОНЕЖУ=НОВОВОРОНЕЖ', 'АРТЕМУ=АРТЕМ',
'ОСБ=', 'Ф-Л=', 'ФОНД=', 'БОЛЬНИЦА=', 'КОЛЛЕГИЯ=', 'ЦЕНТРАЛЬНОЕ=', 'ЦЕНТРСТРОЙ=',
'ТЕХНО=', 'ТОРГОВЫЙ=', 'ПЕТ=', 'МЕЩАНСКОЕ=', 'ЛЮБЛИНСКОЕ=',
'МАРЬИНОРОЩИНСКОЕ=', 'ТРУСОВСКОЕ=', 'КИЕВСКОЕ=', 'ЗЕЛЕНОГРАДСКОЕ='))
)
select distinct coalesce(f.good, n.city)
from norm n
left join fix f on f.bad = n.city
where f.bad is null or f.good is not null;
delete from spr_gorod s
where exists (
select 1 from spr_gorod x
where x.id <> s.id
and ( x.name like s.name || ' %'
or (regexp_like(s.name, '[АУЕИЫЯ]$')
and x.name in (substr(s.name, 1, length(s.name) - 1),
substr(s.name, 1, length(s.name) - 1) || 'А',
substr(s.name, 1, length(s.name) - 1) || 'Ь')))
);
commit;
select * from spr_gorod order by name;