SELECT
COUNT(*) OVER () AS Всего_строк,
FIO
FROM (
WITH t AS (
SELECT
REGEXP_SUBSTR(
REGEXP_REPLACE(
NAIMEN,
'^((КПП[[:space:]]+[0-9]+|КПП|ПРЕДПРИНИ[А-ЯЁа-яё]*|ПБОЮЛ|ИП|ЧП|ФЛ|[0-9]+)[[:space:]]+)+',
'', 1, 0, 'i'
),
'^[А-ЯЁ][А-ЯЁа-яё\-]+'
|| '('
|| '[[:space:]]+[А-ЯЁ]\.[[:space:]]*[А-ЯЁ]\.'
|| '|[[:space:]]+[А-ЯЁ][А-ЯЁа-яё\-]+'
|| '([[:space:]]+[А-ЯЁ][А-ЯЁа-яё\-]+)?'
|| '([[:space:]]+(ОГЛЫ|ОГЛУ|КЫЗЫ|УГЛИ|УУЛУ|ГИРЕЙ|ХАН|БЕК|БАЙ))?'
|| ')'
) AS FIO
FROM SH.UCH_VSE
WHERE
NAIMEN IS NOT NULL
AND NOT REGEXP_LIKE(NAIMEN,
'(ОО?|ОАО|ПО|РУПС|ЗАО|ОТД|ПССП|СЧЕТ|ФИН|МАШИНО[А-ЯЁа-яё]*|ГОС|МЭП|РУФПС|АКБ|КБ|КПП|АГЕНТСТВО|КОМБИНАТ|ГРУППА|СОФТ|КОРПОР[А-ЯЁа-яё]*|ГУПУ|ДЕТСК[А-ЯЁа-яё]*|ОСБ|ДИСТАНЦИЯ|ВДПО|ЖСК|ТСЖ|ФОНД|ГМБХ|БАНК|КОМПАНИЯ|ПРЕДПРИЯТИЕ|ОАНО|УСИБ|ОБЩЕСТВО|ИНДИВИД[А-ЯЁа-яё]*|СОЮЗ|ВКЛАДЫ|ГРАЖДАН|ЧАСТЬ|ЗАКР[А-ЯЁа-яё]*|ЧАСТЬ|ОБЩЕСТВ[А-ЯЁа-яё]*',
'i')
AND NOT REGEXP_LIKE(NAIMEN,
'(АДМИНИСТРА[А-ЯЁа-яё]*|УПРАВ[А-ЯЁа-яё]*|ДЕПАРТАМЕНТ[А-ЯЁа-яё]*|ХОЗ-ВО|ИЗДАТЕЛЬСТВО|ЖИЛЬЕ|ЦЕНТР|ФИРМА|ДОМ|КООПЕРАТИВ|КОМИТЕТ[А-ЯЁа-яё]*|КЛУБ|МФ|МИНИСТЕРСТВ[А-ЯЁа-яё]*|ФЕДЕРАЛЬН[А-ЯЁа-яё]*|ГОСУДАРСТВЕНН[А-ЯЁа-яё]*|АДВОКАТ[А-ЯЁа-яё]*|СЕТИ|МЕДИА|ИНТЕРНЕ[А-ЯЁа-яё]*|МОСКОВСК[А-ЯЁа-яё]*|ПАРТНЕРСТВО|УЧАСТОК)',
'i')
AND NOT REGEXP_LIKE(NAIMEN,
'(МИН?ФИН|ОРГАНИЗАЦИ[А-ЯЁа-яё]*|ГУП|МЕЖДУНАРОДН[А-ЯЁа-яё]*|ИНСТИТУТ|КОНЦЕРН|ДОЧЕРН[А-ЯЁа-яё]*|СК|ИНК|ФИЛИАЛ|ИСТЕРН|Ф-Л|ПРЕДСТАВИТЕЛЬСТВО|ПРЕД-ВО|ЗАВОД|АКЦИОНЕРНОЕ|ГОСТИНИЦА|ПРЕДПРИНИМАТЕЛЬ|[А-ЯЁа-яё]*ФАБРИК[А-ЯЁа-яё]*|АККРЕДИТОВ[А-ЯЁа-яё]*|СЕЙЛЗ|АССОЦИА[А-ЯЁа-яё]*|ВСЕРОСС[А-ЯЁа-яё]*|МУНИЦИП[А-ЯЁа-яё]*|НЕВЫЯСНЕН[А-ЯЁа-яё]*)',
'i')
)
SELECT DISTINCT FIO
FROM t
WHERE
REGEXP_LIKE(FIO, '^[А-ЯЁ]', 'c')
AND REGEXP_LIKE(FIO, '[[:space:]]', 'c')
AND LENGTH(FIO) BETWEEN 6 AND 40
AND NOT REGEXP_LIKE(REGEXP_SUBSTR(FIO, '^[^[:space:]]+'), '^[А-ЯЁ]{2,3}$', 'c')
AND REGEXP_LIKE(
UPPER(REGEXP_SUBSTR(FIO, '^[^[:space:]]+')),
'(ОВ|ЕВ|ЁВ|ИН|ЫН|ИЙ|ЫЙ|ОЙ|СКИЙ|ЦКИЙ|СКАЯ|ЦКАЯ|'
|| 'ЕНКО|УК|ЮК|ЧУК|ЩУК|АК|ЯК|ИК|ИЧ|АЯ|ЯЯ|'
|| 'ШВИЛИ|ДЗЕ|ИДЗЕ|ЯН|ЯНЦ|ОГЛЫ|ОГЛУ|КЫЗЫ|УГЛИ|УУЛУ|'
|| 'ГИРЕЙ|ХАН|БЕК|БАЙ|ЕЦ|ЕНОК|КО|ОВА|ЕВА|ИНА|ЫНА|ЁВА|'
|| 'О|А|Е|И|У|Ю|Я)$',
'i'
)
ORDER BY FIO
);