儲存過程模糊搜尋,按匹配率排序初探

2022-01-11 17:21:06 字數 1677 閱讀 4357

最近的專案中有個搜尋的功能,本來說,搜尋簡單做就可以了,直接like百分號就ok了。但想了想,咱必須做點高大上的東西出來啊,再加上想練習下我並不熟練的儲存過程,所以,決定搞得高大上些。以前做搜尋的時候沒有考慮那麼多,但畢竟專案的使用者是廣大使用者,為了增加使用者體驗,所以應該提供給使用者最想搜尋的結果給使用者,這裡就涉及到了排序,而且是按匹配率排序,也可以說是精確度吧。網上找了會也沒找到合適的。所以就自己寫了。

下面直接上sql**

1

create

proc

[dbo

].[sp_fuzzy_search]2

@keyword

nvarchar(15),--

3@tablename

varchar(20),--

要搜尋的表明

4@cellname

varchar(20)--

要匹配的字段。此處就寫了乙個字段,多個欄位的匹配不在考慮範圍內。5as

6begin

7declare

@sql

nvarchar(500), @num

int,@i

int,@orderby

varchar(200)8

set@i=0

9set

@num

=len(@keyword)10

set@sql='

select id,'+

@cellname+'

from ( select id, '+

@cellname+'

,'11set

@orderby=''

12while

@i<

@num

--13

begin

14set

@sql+='

case when patindex(''%

'+substring(@keyword,1,@num)+'%

'','+

@cellname+'

)>0 then 1 else 0 end as t'+

convert(varchar,@num)+',

'15set@orderby+='

t'+convert(varchar,@num)+

'desc,'16

set@num-=1

1718

end19

--拼接sql語句

20set

@sql

=left(@sql,len(@sql)-

1)+'

from '+

@tablename+'

) as tt where t1>0 order by

'+left(@orderby,len(@orderby)-1)

21--

執行拼接好的sql語句。

22exec sp_executesql @sql

2324

end

測試用資料如下圖:

大概思路就是這樣的,貌似有點bug,各位看官有好的意見或建議,還請不吝賜教。 謝謝。

模糊查詢(儲存過程)

set ansi nulls on set quoted identifier on goalter procedure dbo searchvague description varchar 1000 descriptionlength int,pagenumber tinyint,product...

oracle 儲存過程模糊查詢

t sql的寫法 useadventureworks gocreate procedure findemployee emplname varchar 20 asselect emplname rtrim emplname select c.firstname,c.lastname,a.city f...

儲存過程實現模糊查詢分頁

if exists select 1 from sysobjects where name getnewscount and type p drop proc getnewscount gocreate procedure getnewscount title nvarchar asselect c...