0

我需要一些帮助。我将如何创建一个简单的 SQL 语句来使用这些函数选择 Names @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) > .75 AND JaroWinkler(CustomerFirstName, @userEnteredFirstName) > .75</code>

我使用位于 SimMetrics 的 SimMetrics

4

1 回答 1

0

如果您使用的是 SQL Server 2008 及更高版本(应该在 2005 上工作,我没有测试过)...

尝试使用表格值函数 (TVF)CROSS APPLY来完成这项工作。您可以将标量函数包装在 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 

我希望这有帮助。

于 2014-07-04T04:04:15.703 回答