现在需要这样的一个效果,根据产品名,做模糊查询,得到其产品名相似的产品。
但是越精确的越靠前。
原本我的方式是:
alter function f_splitIncrease
(
@strSource nvarchar(2000),
@strSplitStr nvarchar(100)
)
returns @tempTable table(id int identity primary key, one nvarchar(1000))
as
begin
declare @tempStr nvarchar(1000);
declare @startIndex int;
set @startIndex = 1;
set @strSource = @strSource + @strSplitStr;
while(@startIndex <> 0)
begin
set @startIndex = charindex(@strSplitstr, @strSource, @startIndex+1);
if(@startIndex <> 0)
begin
set @tempStr = left(@strSource, @startIndex - 1);
if(@tempStr <> '')
begin
insert into @tempTable values(@tempStr);
end
end
end
return
end
会得到
the
the office
the office seasons
这样三条记录,
再根据这个去做搜索,代码如下:
(
@name nvarchar(2000),
@splitStr nvarchar(100) = ' '
)
as
begin
declare @tempTable table(
id int identity(1,1) primary key,
ProductID int,
[Name] nvarchar(255),
ProductNo nvarchar(50),
MemberPrice money,
ThumbnailImg nvarchar(255),
ProductImg nvarchar(255)
)
if(@splitStr is Null)
begin
set @splitStr = ' ';
end
begin transaction
insert into @tempTable
select distinct ProductID, [Name], ProductNo, MemberPrice, ThumbnailImg, ProductImg from product p, (select * from dbo.f_splitIncrease(@name, @splitStr)) f
where p.name like + f.one + '%'
if(@@error > 0)
begin
rollback transaction
end
select * from @tempTable
if @@error > 0
rollback
else
commit transaction
end
于是最精确的排在最下面。
但是由于模糊搜索the office时,已经包含了 the office seasons,会出现记录重复。
现在要解决记录重复,如果使用distinct关键字的话,他的结果集就不是最精确的排在最下面。没有达到原本想要的效果。
这里该如何处理呀?
一只萌萌小番薯
达令说
慕桂英3389331
相关分类