最近的專案中有個搜尋的功能,本來說,搜尋簡單做就可以了,直接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...