Загрузка данных


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