如果您确实想按照您在问题中提出的确切方式来定义相似性,那么您将 - 正如您所说 - 必须实现 Levensthein 距离计算。在对 DataReader 检索的每一行进行计算的代码中或作为 SQL Server 函数。
所提出的问题实际上比乍一看更棘手,因为你不能假设知道问题是什么相互共享两个字符串之间的元素可能是。
因此,除了编辑距离之外,您可能还想指定实际必须匹配的连续字符的最小数量(以便得出有效的相似性)。
总之:这听起来像是一种过于复杂且耗时/缓慢的方法。
有趣的是,在 SQL Server 2008 中,您有不同之处 http://msdn.microsoft.com/en-us/library/ms188753.aspx函数其中may用于类似的事情。
它评估两个字符串的语音值并计算差异。我不确定你是否能让它正常工作于多词表达,例如电影标题,因为它不能很好地处理空格或数字,并且过分强调字符串的开头,但它仍然是一个有趣的谓词要注意。
如果你是什么actually试图描述某种搜索功能,那么您应该研究一下全文搜索 http://msdn.microsoft.com/en-us/library/ms142571.aspxSQL Server 2008 的功能。它提供了内置的同义词库支持 http://msdn.microsoft.com/en-us/library/ms142491.aspx, 花哨的 SQL谓词 http://msdn.microsoft.com/en-us/library/ms187787.aspx以及“最佳匹配”的排名机制
编辑:如果你想消除重复项,也许你可以看看 SSIS模糊查找和模糊群变换 http://msdn.microsoft.com/nb-no/library/ms345128.aspx。我自己还没有尝试过,但它看起来是一个很有前途的线索。
EDIT2:如果您不想深入研究 SSIS 并且仍然为 Levenshtein Distance 算法的性能而苦苦挣扎,您也许可以尝试这个算法 http://sites.google.com/site/sqlblindman/fuzzysearchalgorithm这似乎不太复杂。