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_SIMILARITY
与 RANK()
一起使用,但它可能不会产生您期望的相同结果,例如 2 代表 Role2。
查询:
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 |
我有一个 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_SIMILARITY
与 RANK()
一起使用,但它可能不会产生您期望的相同结果,例如 2 代表 Role2。
查询:
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 |