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

时间:2018-11-16 11:12:31

标签: oracle regexp-like

我有一个包含以下值的表:

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

我需要一个查询,该查询接受一个参数,该参数将在where条件下使用regexp_like来提供最佳匹配。
例如::userOrg = XXX
这样的查询
   选择*    从表    哪里regex_like(:userOrg,Org

会返回

Role2  
Role3

我想得到这样的东西

Role3 1  
Role2 2  

,以选择“ XXX”作为最佳匹配。

我们这样的操作员是可行的。
但是我们想切换到regexp_like来使用正则表达式。
有可能吗?
谢谢

1 个答案:

答案 0 :(得分:0)

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

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 |