1

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

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

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

会回来

Role2  
Role3

我想得到这样的东西

Role3 1  
Role2 2  

为了选择 XXX 作为最佳匹配。

我们喜欢运营商这是可行的。
但是我们想切换到 regexp_like 来使用正则表达式。
这可能吗?
谢谢

4

1 回答 1

0

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

SQL小提琴

查询

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 |
于 2018-11-16T11:25:01.803 回答