5

我有一个与 SQL 有关的问题。

我想匹配两个字段的相似性并返回它的相似度百分比。

例如,如果我有一个名为 doc 的字段,其中包含以下内容

This is my first assignment in SQL 

在另一个领域我有类似的东西

My first assignment in SQL 

我想知道如何检查两者之间的相似性并返回多少百分比。

我做了一些研究并想要第二个意见,而且我从未要求过源代码。我已经使用 Levenshtein 距离算法查看了 Soundex()、Difference()、模糊字符串匹配。

4

1 回答 1

5

你没有说你使用的是什么版本的Oracle。本示例基于 11g 版本。您可以使用utl_matchedit_distance包的功能来确定需要更改多少个字符才能将一个字符串转换为另一个字符串。最大函数返回传入参数列表中的最大值。这是一个例子:

-- 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
于 2012-10-28T18:20:31.177 回答