我有一个包含以下值的表:
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来使用正则表达式。
有可能吗?
谢谢
答案 0 :(得分:0)
我想到的一件事情是UTL_MATCH.JARO_WINKLER_SIMILARITY
与RANK()
一起使用,但是它可能不会产生您期望的结果,例如Role2为2。
查询:
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 |