SQL Server 2000 中使用Regex

來源:互聯網
上載者:User

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

下面這個是一個自訂函數,使用者可以調用這個函數判斷指定的字串是否符合Regex的規則.
CREATE FUNCTION dbo.find_regular_expression
 (
  @source varchar(5000),   --需要匹配的源字串
  @regexp varchar(1000),  --Regex
  @ignorecase bit = 0  --是否區分大小寫,預設為false
 )
RETURNS bit  --返回結果0-false,1-true
AS
 BEGIN

 --0(成功)或非零數字(失敗),是由 OLE Automation 物件返回的 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
  END
  EXEC @hr = sp_OASetProperty @objRegExp, 'Global', false
  IF @hr <> 0 BEGIN
   SET @results = 0
   RETURN @results
  END
  EXEC @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
  END
 RETURN @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'

-- 我們的Regex應該類似於
-- [a-zA-Z ]{}
-- 如: [a-zA-Z ]{10}  ...  一個十字元的字串

-- 獲得字串長度
SET @intLength = LEN(@vchSourceString)

-- 設定完整的Regex
SET @vchRegularExpression = '[a-zA-Z ]{' + CAST(@intLength as varchar) + '}'

-- 是否有任何特殊字元
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.'
END

PRINT '**************'

-- 獲得字串長度
SET @intLength = LEN(@vchSourceString2)

-- 設定完整的Regex
SET @vchRegularExpression = '[a-zA-Z ]{' + CAST(@intLength as varchar) + '}'

-- 是否有任何特殊字元
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.'
END

GO

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.