sqlserver中使用正则表达式2

 

 

这两天有个需求,需要在数据库中判断字符串的格式,于是从网上搜集了一些资料,整理了一下。

下面这个是一个自定义函数,用户可以调用这个函数判断指定的字符串是否符合正则表达式的规则.
CREATE FUNCTION dbo.find_regular_expression
(
  
@source varchar ( 5000 ),    -- 需要匹配的源字符串
   @regexp varchar ( 1000 ),   -- 正则表达式
   @ignorecase bit = 0    -- 是否区分大小写,默认为false
)
RETURNS bit    -- 返回结果0-false,1-true
AS
BEGIN

-- 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
  
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 '

-- 我们的正则表达式应该类似于
--
[a-zA-Z ]{}
--
如: [a-zA-Z ]{10}   ...   一个十字符的字符串

-- 获得字符串长度
SET @intLength = LEN ( @vchSourceString )

-- 设置完整的正则表达式
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 )

-- 设置完整的正则表达式
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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值