with src as (
select naimen,
upper(trim(naimen)) as r, -- для латинских форм (LLC, LTD...)
translate(
regexp_replace(upper(trim(naimen)), '[[:space:]]+', ' '),
'ABCEHKMOPTXY0',
'АВСЕНКМОРТХУО'
) as n -- нормализованное имя для кириллических форм
from sh.uch_vse
where naimen is not null
and length(naimen) between 5 and 300
)
select distinct naimen as "Наименование"
from src
where (
-- аббревиатуры (ООО, OOO, 0A0, OAO и т.п. после нормализации)
regexp_like(n,
'^(ООО|ОАО|ЗАО|ПАО|АО|НАО|ТОО|ИП|НКО|ФГУП|МУП|ГУП|ГБУ|ГКУ|ГАУ|АНО|ПК|СПК|КФХ|РПО|СНТ|ТСЖ|ЖСК|АКБ|КБ)([[:space:]"«„''‘’“”]|$)')
-- полные названия
or regexp_like(n,
'^(ОБЩЕСТВО С ОГРАНИЧЕННОЙ ОТВЕТСТВЕННОСТЬЮ|(ПУБЛИЧНОЕ |ЗАКРЫТОЕ |ОТКРЫТОЕ )?АКЦИОНЕРНОЕ ОБЩЕСТВО|ИНДИВИДУАЛЬНЫЙ ПРЕДПРИНИМАТЕЛЬ)([[:space:]"«„''‘’“”]|$)')
-- иностранные формы (по исходной строке, без транслитерации)
or regexp_like(r,
'^(LLC|LTD|JSC|PJSC|INC|GMBH)([[:space:]"«„''‘’“”]|$)')
)
and not regexp_like(naimen, '^[А-ЯЁ][А-ЯЁа-яё-]+[[:space:]]+[А-ЯЁ]\.', 'c')
order by naimen;