SQL模式匹配

SQL模式匹配,sql,oracle,matching,Sql,Oracle,Matching,我有一个关于SQL的问题 我想匹配两个字段的相似性,并返回其相似程度的百分比 例如,如果我有一个名为doc的字段,它包含以下内容 This is my first assignment in SQL 在另一个领域,我有 My first assignment in SQL 我想知道如何检查两者之间的相似性,并按百分比返回多少 我做了一些研究,希望得到第二个意见,而且我从来没有问过源代码。我用Levenshtein距离算法研究了Soundex()、Difference()、模糊字符串匹配

我有一个关于SQL的问题

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

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

This is my first assignment in SQL 
在另一个领域,我有

My first assignment in SQL 
我想知道如何检查两者之间的相似性,并按百分比返回多少


我做了一些研究,希望得到第二个意见,而且我从来没有问过源代码。我用Levenshtein距离算法研究了Soundex()、Difference()、模糊字符串匹配

你没有说你使用的是什么版本的Oracle。此示例基于11g版本。 您可以使用软件包的
edit_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正确指出的那样,使用
utl\u match
包的
edit\u distance\u similarity
函数要简单得多

 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

小贴士:查看汉明距离和类似的字符串相似性算法我做了一些研究,希望得到第二个意见,而且我从未询问过源代码。我用Levenshtein距离算法研究了Soundex()、Difference()、模糊字符串匹配。谢谢你给我的小费别客气,谢谢!我正在使用Oracle11g。我不期待任何代码,所以谢谢+1您可以使用
utl\u匹配来简化此过程。编辑距离\u相似性(col1,col2)