Oracle: сортировка результатов выражения регулярного выражения - PullRequest
0 голосов
/ 16 ноября 2018

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

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

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

вернется

Role2  
Role3

Я бы хотел получить что-то подобное

Role3 1  
Role2 2  

, чтобы выбрать XXX как лучший матч.

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

1 Ответ

0 голосов
/ 16 ноября 2018

Одна вещь, которая приходит на ум, это 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 |
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...