【问题标题】:Fuzzy matching by using SimMetrics library使用 SimMetrics 库进行模糊匹配
【发布时间】:2014-07-16 15:35:15
【问题描述】:

我需要一些帮助。我将如何创建一个简单的 SQL 语句来使用这些函数选择名称 @userEnteredName。换句话说,我想从用户输入 smyth 的客户表中获取客户名称,然后返回 smith、smitty 等......

...或者一句话我如何使用下面创建的函数来查询数据库表。

提前感谢您的帮助。

<code>declare @userEnteredLastName varchar(200); declare @userEnteredFirstName varchar(200); set @userEnteredLastName='smyth'; set @userEnteredFirstName='Jon';

SELECT * FROM Customer WHERE JaroWinkler(CustomerLastName, @userEnteredLastName) &gt; .75 AND JaroWinkler(CustomerFirstName, @userEnteredFirstName) &gt; .75&lt;/code&gt;

我使用位于 SimMetrics 的 SimMetrics 库

【问题讨论】:

    标签: fuzzy-search fuzzy-logic fuzzy-comparison fuzzyfinder


    【解决方案1】:

    如果你使用的是 SQL Server 2008 及以上版本(应该可以在 2005 上使用,我没有测试过)...

    尝试使用CROSS APPLY 形式的表值函数 (TVF) 来完成这项工作。 您可以将标量函数包装在 TVF 中来完成此操作,如下所示:

    CREATE FUNCTION dbo.Jarowinklertvf(@firstword  NVARCHAR(255), 
                                       @secondword NVARCHAR(255)) 
    returns TABLE 
    AS 
        RETURN 
          (SELECT dbo.Jarowinkler(@firstword, @secondword) Score, 
                  'JaroWinkler'                            Metric) 
    

    然后像这样调用函数:

    DECLARE @userEnteredLastName VARCHAR(200); 
    DECLARE @userEnteredFirstName VARCHAR(200); 
    
    SET @userEnteredLastName='smyth'; 
    SET @userEnteredFirstName='Jon'; 
    
    SELECT l.score LastNameScore, 
           f.score FirstNameScore, 
           i.* 
    FROM   customer i 
           CROSS apply dbo.Jarowinklertvf(i.customerlastname, @userEnteredLastName) 
                       l 
           CROSS apply dbo.Jarowinklertvf(i.customerfirstname, @userEnteredFirstName 
                       ) f 
    WHERE  l.score > .75 
           AND f.score > .75 
    ORDER  BY 1 DESC 
    

    我希望这会有所帮助。

    【讨论】:

      猜你喜欢
      • 2010-10-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-19
      • 2011-05-04
      • 1970-01-01
      相关资源
      最近更新 更多