Вытаскиваем записи, у которых есть хотя бы одна нерусская буква
with t as
(
select 1 id, 'Сидоров' s from dual
union all
select 2, 'Cидoров' from dual
union all
select 3, 'Пирогов' from dual
)
select * from t t0
where soundex(t0.s) is not null;
ID S
---------- -------
2 Cидoров
Предположительные совпадения (Пирогов добавлен для показательности неточности подхода)
with t as
(
select 1 id, 'Сидоров' s from dual
union all
select 2, 'Cидoров' from dual
union all
select 3, 'Пирогов' from dual
)
select * from t t0, t t1
where UTL_MATCH.JARO_WINKLER_SIMILARITY(t0.s,t1.s)>=70
and soundex(t0.s) is null
and soundex(t1.s) is not null
and t0.id<>t1.id;
ID S ID S
---------- ------- ---------- -------
1 Сидоров 2 Cидoров
3 Пирогов 2 Cидoров
Простой translate для вытаскивания совпадающих написаний
with t as
(
select 1 id, 'Сидоров' s from dual
union all
select 2, 'Cидoров' from dual
union all
select 3, 'Пирогов' from dual
)
select * from t t0, t t1
where translate(t1.s,'AaBbCcEegHKkMmOoPpTuXxy','АаВьСсЕедНКкМтОоРрТиХху')=t0.s
and t0.id<>t1.id;
ID S ID S
---------- ------- ---------- -------
1 Сидоров 2 Cидoров
Вывести данные в одном языке (латиница или кирилица) + цифры и знак подчёрка:
with t as
(
select 'Сидоров' val from dual
union all
select 'Cидoров' from dual
union all
select 'Пирогов' from dual
union all
select 'ASD_1' from dual
union all
select 'ASD_1Я' from dual
)
select val from t
where regexp_like(val, '^([A-z]|[0-9]|_)+$') or regexp_like(val, '^([А-я]|[0-9]|_)+$')
/
VAL
-------
Сидоров
Пирогов
ASD_1
Последние комментарии