0

ここで助けが必要です。これらの関数を使用して Names @userEnteredName を選択する単純な SQL ステートメントを作成するにはどうすればよいでしょうか。つまり、ユーザーが 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 に答える