我需要一些帮助。我将如何使用这些函数创建一个简单的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库答案 0 :(得分:0)
如果您使用的是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
我希望这会有所帮助。