Oracle: отсортируйте результаты выражения regexp_like

У меня есть таблица, содержащая следующие значения:

Org    Role  
----   ---------  
XX     Role2  
XXX    Role3  
XXXX   Role4    
null   RoleDefault

Мне нужен запрос, принимающий параметр, который дал бы мне наилучшее совпадение с использованием regexp_like в условии where.
Например, с: userOrg = XXX
подобным запросом
select * from table where regex_like (: userOrg, Org)

вернется

Role2  
Role3

Хотелось бы получить что-то подобное

Role3 1  
Role2 2  

чтобы выбрать XXX как лучшее совпадение.

Мы, оператор Like, это возможно.
Но мы хотим переключиться на regexp_like, чтобы использовать регулярное выражение.
Возможно ли это?
Спасибо


person I. D.    schedule 16.11.2018    source источник
comment
Получить совпадение, конечно, возможно. Получение наилучшего соответствия подразумевает, что вы намереваетесь ранжировать все термины на основе некоторого измерения сходства. Что это за измерение?   -  person Tim Biegeleisen    schedule 16.11.2018


Ответы (1)


Одна вещь, которая приходит на ум, UTL_MATCH.JARO_WINKLER_SIMILARITY используется с RANK(), но это может не дать того же результата, которого вы ожидаете, скажем 2 для роли 2.

SQL Fiddle

Запрос:

select org,role,
 rank() OVER ( ORDER BY UTL_MATCH.JARO_WINKLER_SIMILARITY( ORG,'XXX') desc ) as matched
from t

Результаты:

|    ORG |        ROLE | MATCHED |
|--------|-------------|---------|
|    XXX |       Role3 |       1 |
|   XXXX |       Role4 |       2 |
|     XX |       Role2 |       3 |
| (null) | RoleDefault |       4 |
person Kaushik Nayak    schedule 16.11.2018