SQL模式匹配

时间:2012-10-28 17:31:52

标签: sql oracle matching

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

我想匹配两个相似的字段,并返回一个百分比的相似程度。

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

This is my first assignment in SQL 

在另一个领域我有类似

的东西
My first assignment in SQL 

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

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

1 个答案:

答案 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