日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

关键字搜索.sql

發布時間:2023/12/20 编程问答 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 关键字搜索.sql 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[f_search]') and xtype in (N'FN', N'IF', N'TF'))
drop function [dbo].[f_search]
GO

if exists (select * from dbo.sysobjects where id = object_id(N'[序數表]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [序數表]
GO

--為了效率,所以要一個輔助表配合
select top 2000 id=identity(int,1,1) into 序數表
from syscolumns a,syscolumns b
alter table 序數表 add constraint pk_id_序數表 primary key(id)
GO

/*--關鍵字搜索的函數
?
?在ntext數據中,搜索以空格分隔的關鍵字
?搜索到的關鍵字如果出現了多次,則只取最早出現的一次
?搜索到的關鍵字前后保留的字符數據,根據函數中定義的總字符數/關鍵字個數決定

--鄒建 2004.11(引用請保留此信息)--*/

/*--調用示例

?select dbo.f_search('北京 公司 網站 軟件 IT WWW','北京百聯美達美數碼科技有限公司,是面向IT專業技術人員和軟件開發及應用企業,以專業社區為中心的IT專業知識傳播與服務商。公司以IT專業網站(www.CSDN.net)為中心,建立了龐大的專業用戶群, 形成了網站和期刊雜志、專業出版、電子商務、企業服務、信息服務,教育培訓等關聯業務互動的商業模式。')
--*/
create function f_search(
@keyword nvarchar(2000),
@text ntext
)returns nvarchar(4000)
as
begin
?declare @relen int
?set @relen=120?--搜索結果返回的總長度(不包含關鍵字自身長度)
??--根據這個總長度/搜索的關鍵字個數,決定關鍵字前后包含的字符數

?declare @t table(keyword nvarchar(120),skey nvarchar(120))
?declare @r nvarchar(800),@i int,@ilen int

?--分拆關鍵字列表
?insert @t select substring(@keyword,id,charindex(' ',@keyword+' ',id)-id)
??,'%'+substring(@keyword,id,charindex(' ',@keyword+' ',id)-id)+'%'
?from 序數表
?where id<=len(@keyword)+1 and charindex(' ',' '+@keyword,id)-id=0
?
?--關鍵字前后要取的字符數(如果關鍵字前后的字符數是固定的,則直接為@ilen賦值)
?select @ilen=@relen/count(*) from @t
?--如果沒有搜索的關鍵字,或者無法取得前后的值,則直接退出
?if @ilen=0 return('')

?--取關鍵字
?declare @p1 int,@plen int
?select @r='',@i=null
?select
??@p1=case
???when @i>=pos-@ilen then @i
???when pos<@ilen then 1
???else pos-@ilen end,
??@plen=case
???when @i>=pos-@ilen then @ilen+keylen-@i+pos
???when pos<@ilen then @ilen+keylen+pos
???else @ilen*2+keylen end,
??@r=@r+case
???when @i>=pos-@ilen then ''
???else '...' end
???+substring(@text,@p1,@plen),
??@i=@p1+@plen
?from(
??select top 100 keyword,pos=patindex(skey,@text),keylen=len(keyword)
??from @t
??where patindex(skey,@text)>0
??order by pos
?)a

?return(@r+'...')
end
go

轉載于:https://www.cnblogs.com/dushu/archive/2012/05/19/2508678.html

總結

以上是生活随笔為你收集整理的关键字搜索.sql的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。