我有一个与SQL相关的问题。
我想匹配两个相似的字段,并返回一个百分比的相似程度。
例如,如果我有一个名为doc的字段,其中包含以下内容
This is my first assignment in SQL
在另一个领域我有类似
的东西My first assignment in SQL
我想知道如何检查两者之间的相似性并返回多少百分比。
我做了一些研究,想要第二个意见,而且我从未要求过源代码。我看过Soundex(),差异(),使用Levenshtein距离算法的模糊字符串匹配。
答案 0 :(得分:5)
您没有说明您正在使用的Oracle版本。此示例基于11g版本。
您可以使用utl_match包的edit_distance
函数来确定需要更改多少个字符才能将一个字符串转换为另一个字符串。 greatest函数返回传入参数列表中的最大值。这是一个例子:
-- sample of data
with t1(col1, col2) as(
select 'This is my first assignment in SQL', 'My first assignment in SQL ' from dual
)
-- the query
select trunc(((greatest(length(col1), length(col2)) -
(utl_match.edit_distance(col2, col1))) * 100) /
greatest(length(col1), length(col2)), 2) as "%"
from t1
结果:
%
----------
70.58
<强>附录强>
正如@jonearles正确指出的那样,使用edit_distance_similarity
包的utl_match
函数要简单得多。
with t1(col1, col2) as(
select 'This is my first assignment in SQL', 'My first assignment in SQL ' from dual
)
select utl_match.edit_distance_similarity(col1, col2) as "%"
from t1
;
结果:
%
----------
71