Простой вариант - использовать instr
, который показывает, существует ли surname
в fullname
:
SQL> with test (id, fullname, surname) as
2 (select 1, 'John Doe' , 'Doe' from dual union all
3 select 2, 'Peter Parker' , 'Parker' from dual union all
4 select 3, 'Brian Griffin', 'Brian Griffin' from dual
5 )
6 select *
7 from test
8 where instr(fullname, surname) > 0;
ID FULLNAME SURNAME
---------- ------------- -------------
1 John Doe Doe
2 Peter Parker Parker
3 Brian Griffin Brian Griffin
Другой вариант - использовать одну из функций UTL_MATCH
, например Сходство Яро-Винклера, которое показывает, насколько хорошо эти строки соответствуют :
SQL> with test (id, fullname, surname) as
2 (select 1, 'John Doe' , 'Doe' from dual union all
3 select 2, 'Peter Parker' , 'Parker' from dual union all
4 select 3, 'Brian Griffin', 'Brian Griffin' from dual
5 )
6 select id, fullname, surname,
7 utl_match.jaro_winkler_similarity(fullname, surname) jws
8 from test
9 order by id;
ID FULLNAME SURNAME JWS
---------- ------------- ------------- ----------
1 John Doe Doe 48
2 Peter Parker Parker 62
3 Brian Griffin Brian Griffin 100
SQL>
Не стесняйтесь исследовать другие функции, которые предлагает пакет.
Также обратите внимание, что Я не обратил внимания на возможные различия в регистре букв (например, «DOE» и «Doe»). Если вам это тоже нужно, сравните, например, upper(surname)
с upper(fullname)
.