Oracle:对 regexp_like 表达式的结果进行排序

Oracle: sort the results of a regexp_like expression

我有一个 table 包含以下值:

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

我需要一个接受参数的查询,该参数会在 where 条件中使用 regexp_like 为我提供最佳匹配。
例如:userOrg = XXX
像这样的查询
select * 来自 table 其中 regex_like(:userOrg,Org)

会return

Role2  
Role3

我想要这样的东西

Role3 1  
Role2 2  

以便选择 XXX 作为最佳匹配。

我们like算子这是可行的
但是我们想切换到 regexp_like 来使用正则表达式。
这可能吗?
谢谢

想到的一件事是 UTL_MATCH.JARO_WINKLER_SIMILARITYRANK() 一起使用,但它可能不会产生您期望的相同结果,例如 2 代表 Role2。

SQL Fiddle

查询:

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

Results:

|    ORG |        ROLE | MATCHED |
|--------|-------------|---------|
|    XXX |       Role3 |       1 |
|   XXXX |       Role4 |       2 |
|     XX |       Role2 |       3 |
| (null) | RoleDefault |       4 |