【发布时间】:2009-06-11 13:15:32
【问题描述】:
我在一个 sql server 数据库中有一个包含两个字段的表,我的 asp.net 应用程序调用一个带有“@SearchString”参数的存储过程,该存储过程会找到所有在连接中找到 @Searchstring 值的记录表中的两个字段,分别称为“Field1”和“Field2”
所以逻辑看起来像这样(我已经简化了实际的查询):
CREATE PROCEDURE [dbo].[sp_FindMatches] @SearchString varchar(30)
AS
SELECT * FROM Table1 WHERE Field1+Field2 LIKE @SearchString
我想改进这个相当基本的匹配算法,使其匹配的记录没有那么严格。例如,如果用户输入“DOG HOUSE”作为参数,现有 SP 中相当基本的逻辑将返回找到确切字符串的记录。我希望它也只返回带有“DOG”和“HOUSE”的记录,即使字符串并不完全相邻。
如果有一种方法可以根据“最佳匹配”对记录进行排名,那就更好了,即如果找到“DOG HOUSE”,则它是完全匹配的,如果“DOG”和“HOUSE”是找到,第二好的匹配,如果“dog but not 'house' 或 'house' but not 'dog' 第三最佳等。
是否有一种通用算法可以满足我的大部分需求?
【问题讨论】:
标签: sql sql-server-2008 stored-procedures pattern-matching