Oracle SQL:在 UTL 匹配中添加大小写



我正在使用UTL匹配从两个不同的表中检索匹配的值以及它们的相似程度。我正在按 90 个相似值中至少 100 个的人进行过滤,因此我可以手动检查这些值是否真的相同。

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

为了做到这一点,我刚刚使用了 WHERE 子句,但现在我想插入一个 CASE 语句,因为我想声明那些包含单词"大学"并且没有 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)
;

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

但乍一看,它可以简化。

使用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

最新更新