這兩天有個需求,需要在資料庫中判斷字串的格式,於是從網上蒐集了一些資料,整理了一下。
下面這個是乙個自定義函式,使用者可以呼叫這個函式判斷指定的字串是否符合正規表示式的規則.
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...