SQL Server 2000 中使用正規表示式

2021-08-22 20:22:25 字數 3352 閱讀 6944

這兩天有個需求,需要在資料庫中判斷字串的格式,於是從網上蒐集了一些資料,整理了一下。

下面這個是乙個自定義函式,使用者可以呼叫這個函式判斷指定的字串是否符合正規表示式的規則.

createfunctiondbo.find_regular_expression

(@sourcevarchar(5000),--需要匹配的源字串

@regexpvarchar(1000),--正規表示式

@ignorecasebit=0--是否區分大小寫,預設為false

)returnsbit--返回結果0-false,1-true

asbegin

--0(成功)或非零數字(失敗),是由ole自動化物件返回的hresult的整數值。

declare@hrinteger

--用於儲存返回的物件令牌,以便之後對該物件進行操作

declare@objregexpintegerdeclare@objmatchesinteger

--儲存結果

declare@resultsbit

/*建立ole物件例項,只有sysadmin固定伺服器角色的成員才能執行sp_oacreate,並確定機器中有vbscript.regexp類庫

*/exec@hr=sp_oacreate'vbscript.regexp',@objregexpoutput

if@hr<>0begin

set@results=0

return@results

end/*

以下三個分別是設定新建物件的三個屬性。下面是'vbscript.regexp'中常用的屬性舉例:

dimregex,match,matches'建立變數。

setregex=newregexp'建立一般表示式。

regex.pattern=patrn'設定模式。

regex.ignorecase=true'設定是否區分大小寫。

regex.global=true'設定全域性可用性。

setmatches=regex.execute(string)'重複匹配集合

regexptest=regex.execute(strng)'執行搜尋。

foreachmatchinmatches'重複匹配集合

retstr=retstr&"matchfoundatposition"

retstr=retstr&match.firstindex&".matchvalueis'"

retstr=retstr&match.value&"'."&vbcrlfnext

regexptest=retstr

*/exec@hr=sp_oasetproperty@objregexp,'pattern',@regexp

if@hr<>0begin

set@results=0

return@results

endexec@hr=sp_oasetproperty@objregexp,'global',false

if@hr<>0begin

set@results=0

return@results

endexec@hr=sp_oasetproperty@objregexp,'ignorecase',@ignorecase

if@hr<>0begin

set@results=0

return@results

end--呼叫物件方法

exec@hr=sp_oamethod@objregexp,'test',@resultsoutput,@source

if@hr<>0begin

set@results=0

return@results

end--釋放已建立的ole物件

exec@hr=sp_oadestroy@objregexp

if@hr<>0begin

set@results=0

return@results

endreturn@results

end下面是乙個簡單的測試sql語句,可以直接在查詢分析器中執行。

declare@intlengthasinteger

declare@vchregularexpressionasvarchar(50)

declare@vchsourcestringasvarchar(50)

declare@vchsourcestring2asvarchar(50)

declare@bithasnospecialcharactersasbit

--初始化變數

set@vchsourcestring='testonethisisatest!!'

set@vchsourcestring2='testtwothisisatest'

--我們的正規表示式應該類似於

--[a-za-z]{}

--如:[a-za-z]...乙個十字元的字串

--獲得字串長度

set@intlength=len(@vchsourcestring)

--設定完整的正規表示式

set@vchregularexpression='[a-za-z]'

--是否有任何特殊字元

set@bithasnospecialcharacters=dbo.find_regular_expression(@vchsourcestring,@vchregularexpression,0)

print@vchsourcestring

if@bithasnospecialcharacters=1begin

print'nospecialcharacters.'

endelsebegin

print'specialcharactersfound.'

endprint'**************'

--獲得字串長度

set@intlength=len(@vchsourcestring2)

--設定完整的正規表示式

set@vchregularexpression='[a-za-z]'

--是否有任何特殊字元

set@bithasnospecialcharacters=dbo.find_regular_expression(@vchsourcestring2,@vchregularexpression,0)

print@vchsourcestring2

if@bithasnospecialcharacters=1begin

print'nospecialcharacters.'

endelsebegin

print'specialcharactersfound.'

endgo

SQL Server 2000中全文檢索的使用

sql server 2000中全文檢索的使用 1 引言 微軟的sql server資料庫是乙個在中低端企業應用中占有廣泛市場的關係型資料庫系統,它以簡單 方便 易用等特性深得眾多軟體開發人員和資料庫管理人員的鍾愛。但sql server 7.0以前的資料庫系統由於沒有全文檢索功能,致使無法提供像文...

SQL Server 2000中全文檢索的使用

進行全文檢索 where freetext successful life 建立全文索引 go 檢查全文目錄填充情況 while fulltextcatalogproperty ft test populatestatus 0 begin 如果全文目錄正處於填充狀態,則等待30秒後再檢測一次 wai...

SQL Server 2000中全文檢索的使用

微軟的sql server資料庫是乙個在中低端企業應用中占有廣泛市場的關係型資料庫系統,它以簡單 方便 易用等特性深得眾多軟體開發人員和資料庫管理人員的鍾愛。但sql server 7.0以前的資料庫系統由於沒有全文檢索功能,致使無法提供像文字內容查詢此類的服務,成為乙個小小的遺憾。從sql ser...