【问题标题】:Oracle: sort the results of a regexp_like expressionOracle:对 regexp_like 表达式的结果进行排序
【发布时间】:2019-04-19 13:48:36
【问题描述】:

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

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 来使用正则表达式。
这可能吗?
谢谢

【问题讨论】:

  • 当然可以进行匹配。获得 最佳 匹配意味着您打算根据某种相似性度量对所有术语进行排名。那是什么测量值?

标签: oracle regexp-like


【解决方案1】:

想到的一件事是 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 |

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-27
    • 1970-01-01
    • 1970-01-01
    • 2018-07-25
    • 1970-01-01
    相关资源
    最近更新 更多