Нечеткое сопоставление с использованием библиотеки SimMetrics

Мне нужна помощь здесь. Как бы, я создаю простую инструкцию 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) > .75 AND JaroWinkler(CustomerFirstName, @userEnteredFirstName) > .75</code>

Я использую для этого библиотеку SimMetrics, расположенную по адресу SimMetrics


person user3641280    schedule 27.05.2014    source источник


Ответы (1)


Если вы используете 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 

Надеюсь, это поможет.

person Sternman    schedule 04.07.2014