【问题标题】:Oracle SQL: Adding Case When inside UTL MatchOracle SQL:在 UTL 匹配中添加大小写
【发布时间】:2019-12-18 15:34:00
【问题描述】:

我正在使用 UTL 匹配从两个不同的表中检索匹配的值以及它们的相似程度。我正在筛选 100 个相似点中至少有 90 个的人,因此我可以手动检查这些值是否实际上相同。

由于结果数据太大,我正在处理一些新查询以取出那些肯定是相同值且不需要任何手动检查的值。就像那些 >90% 相似且大小为 9 个字符的。

为了做到这些,我刚刚使用了 WHERE CLAUSE,但现在我想插入一个 CASE STATEMENT,因为我想说明那些包含单词“University”并且不包含有 95% 的相似度不应该出现。

我正在使用的代码似乎正在运行,但这需要很长时间。你知道它是否可以改进(时间)。谢谢!!!

我使用的代码如下:

with consolidate_table as (....)

select
column1, column2,
UTL_MATCH.jaro_winkler_similarity(column1, column2) as jws
from consolidate_table

where UTL_MATCH.jaro_winkler_similarity(column1, column2) >= 90
AND UTL_MATCH.jaro_winkler_similarity(column1, column2) < 100
AND LENGTH (column1) <9
AND column1 = (CASE
    WHEN column1 LIKE '%University%' 
    AND UTL_MATCH.jaro_winkler_similarity(column1, column2) > 94
    THEN column1 ELSE NULL
    END)

;

【问题讨论】:

    标签: sql oracle common-table-expression case-when


    【解决方案1】:

    不确定没有样本数据和预期结果。

    但乍一看,它可以被简化。

    使用BETWEEN,该函数只会被调用一次。
    过滤那些相等的可以帮助加快速度。

    ...
    WHERE column1 <> column2
      AND UTL_MATCH.jaro_winkler_similarity(column1, column2) BETWEEN (CASE WHEN column1 LIKE '%University%' THEN 95 ELSE 91 END) AND 99
    

    【讨论】:

    • 但这只会返回包含大学的值。我也需要剩下的。这是关于添加条件;每当它找到一个包含单词 University 并且相似度大于 95 的值时。它不应该显示它
    猜你喜欢
    • 1970-01-01
    • 2015-06-22
    • 1970-01-01
    • 2016-07-03
    • 2015-06-13
    • 2021-07-09
    • 2016-10-18
    • 2021-12-21
    • 1970-01-01
    相关资源
    最近更新 更多