這兩天有個需求,需要在資料庫中判斷字串的格式,於是從網上蒐集了一些資料,整理了一下。
下面這個是乙個自定義函式,使用者可以呼叫這個函式判斷指定的字串是否符合正規表示式的規則.
create function dbo.find_regular_expression
(@source varchar(5000), --需要匹配的源字串
@regexp varchar(1000), --正規表示式
@ignorecase bit = 0 --是否區分大小寫,預設為false
)returns bit --返回結果0-false,1-true
asbegin
--0(成功)或非零數字(失敗),是由 ole 自動化物件返回的 hresult 的整數值。
declare @hr integer
--用於儲存返回的物件令牌,以便之後對該物件進行操作
declare @objregexp integer declare @objmatches integer
--儲存結果
declare @results bit
/*建立 ole 物件例項,只有 sysadmin 固定伺服器角色的成員才能執行 sp_oacreate,並確定機器中有vbscript.regexp類庫
*/exec @hr = sp_oacreate 'vbscript.regexp', @objregexp output
if @hr <> 0 begin
set @results = 0
return @results
end/*
以下三個分別是設定新建物件的三個屬性。下面是'vbscript.regexp'中常用的屬性舉例:
dim regex,match,matches '建立變數。
set regex = new regexp '建立一般表示式。
regex.pattern= patrn '設定模式。
regex.ignorecase = true '設定是否區分大小寫。
regex.global=true '設定全域性可用性。
set matches=regex.execute(string) '重複匹配集合
regexptest = regex.execute(strng) '執行搜尋。
for each match in matches '重複匹配集合
retstr=retstr &"match found at position "
retstr=retstr&match.firstindex&".match value is '"
retstr=retstr&match.value&"'."&vbcrlf next
regexptest=retstr
*/exec @hr = sp_oasetproperty @objregexp, 'pattern', @regexp
if @hr <> 0 begin
set @results = 0
return @results
endexec @hr = sp_oasetproperty @objregexp, 'global', false
if @hr <> 0 begin
set @results = 0
return @results
endexec @hr = sp_oasetproperty @objregexp, 'ignorecase', @ignorecase
if @hr <> 0 begin
set @results = 0
return @results
end
--呼叫物件方法
exec @hr = sp_oamethod @objregexp, 'test', @results output, @source
if @hr <> 0 begin
set @results = 0
return @results
end--釋放已建立的 ole 物件
exec @hr = sp_oadestroy @objregexp
if @hr <> 0 begin
set @results = 0
return @results
endreturn @results
end下面是乙個簡單的測試sql語句,可以直接在查詢分析器中執行。
declare @intlength as integer
declare @vchregularexpression as varchar(50)
declare @vchsourcestring as varchar(50)
declare @vchsourcestring2 as varchar(50)
declare @bithasnospecialcharacters as bit
-- 初始化變數
set @vchsourcestring = 'test one this is a test!!'
set @vchsourcestring2 = 'test two this is a test'
-- 我們的正規表示式應該類似於
-- [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 = 1 begin
print 'no special characters.'
end else begin
print 'special characters found.'
endprint '**************'
-- 獲得字串長度
set @intlength = len(@vchsourcestring2)
-- 設定完整的正規表示式
set @vchregularexpression = '[a-za-z ]'
-- 是否有任何特殊字元
set @bithasnospecialcharacters = dbo.find_regular_expression(@vchsourcestring2, @vchregularexpression,0)
print @vchsourcestring2
if @bithasnospecialcharacters = 1 begin
print 'no special characters.'
end else begin
print 'special characters found.'
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...