SQL Server 2000 中使用正则表达式

本文介绍了一个SQL自定义函数,用于判断字符串是否符合特定的正则表达式规则。通过示例展示了如何创建和使用该函数来验证字符串中是否存在特殊字符。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

下面这个是一个自定义函数,用户可以调用这个函数判断指定的字符串是否符合正则表达式的规则.
 

  1. CREATE FUNCTION dbo.find_regular_expression
  2.  (
  3.   @source varchar(5000),   --需要匹配的源字符串
  4.   @regexp varchar(1000),  --正则表达式
  5.   @ignorecase bit = 0  --是否区分大小写,默认为false
  6.  )
  7. RETURNS bit  --返回结果0-false,1-true
  8. AS
  9.  BEGIN
  10.  --0(成功)或非零数字(失败),是由 OLE 自动化对象返回的 HRESULT 的整数值。
  11.   DECLARE @hr integer 
  12. --用于保存返回的对象令牌,以便之后对该对象进行操作
  13.   DECLARE @objRegExp integer   DECLARE @objMatches integer
  14. --保存结果
  15.   DECLARE @results bit
  16.   
  17. /*
  18. 创建 OLE 对象实例,只有 sysadmin 固定服务器角色的成员才能执行 sp_OACreate,并确定机器中有VBScript.RegExp类库
  19. */
  20.   EXEC @hr = sp_OACreate 'VBScript.RegExp', @objRegExp OUTPUT
  21.   IF @hr <> 0 BEGIN
  22.    SET @results = 0
  23.    RETURN @results
  24.   END
  25. /*
  26. 以下三个分别是设置新建对象的三个属性。下面是'VBScript.RegExp'中常用的属性举例:
  27.     Dim regEx,Match,Matches         '建立变量。
  28.     Set regEx = New RegExp         '建立一般表达式。
  29.     regEx.Pattern= patrn         '设置模式。
  30.     regEx.IgnoreCase = True         '设置是否区分大小写。
  31.     regEx.Global=True                             '设置全局可用性。
  32.     set Matches=regEx.Execute(string)             '重复匹配集合
  33.     RegExpTest = regEx.Execute(strng)      '执行搜索。
  34.    for each match in matches                    '重复匹配集合
  35.    RetStr=RetStr &"Match found at position "
  36.    RetStr=RetStr&Match.FirstIndex&".Match Value is '"
  37.    RetStr=RetStr&Match.Value&"'."&vbCRLF Next
  38.    RegExpTest=RetStr
  39. */
  40.   EXEC @hr = sp_OASetProperty @objRegExp, 'Pattern', @regexp
  41.   IF @hr <> 0 BEGIN
  42.    SET @results = 0
  43.    RETURN @results
  44.   END
  45.   EXEC @hr = sp_OASetProperty @objRegExp, 'Global'false
  46.   IF @hr <> 0 BEGIN
  47.    SET @results = 0
  48.    RETURN @results
  49.   END
  50.   EXEC @hr = sp_OASetProperty @objRegExp, 'IgnoreCase', @ignorecase
  51.   IF @hr <> 0 BEGIN
  52.    SET @results = 0
  53.    RETURN @results
  54.   END 
  55. --调用对象方法
  56.   EXEC @hr = sp_OAMethod @objRegExp, 'Test', @results OUTPUT, @source
  57.   IF @hr <> 0 BEGIN
  58.    SET @results = 0
  59.    RETURN @results
  60.   END
  61. --释放已创建的 OLE 对象
  62.   EXEC @hr = sp_OADestroy @objRegExp
  63.   IF @hr <> 0 BEGIN
  64.    SET @results = 0
  65.    RETURN @results
  66.   END
  67.  RETURN @results
  68.  END
下面是一个简单的测试sql语句,可以直接在查询分析器中运行。
 
  1. DECLARE @intLength AS INTEGER
  2. DECLARE @vchRegularExpression AS VARCHAR(50)
  3. DECLARE @vchSourceString as VARCHAR(50)
  4. DECLARE @vchSourceString2 as VARCHAR(50)
  5. DECLARE @bitHasNoSpecialCharacters as BIT
  6. -- 初始化变量
  7. SET @vchSourceString = 'Test one This is a test!!'
  8. SET @vchSourceString2 = 'Test two This is a test'
  9. -- 我们的正则表达式应该类似于
  10. -- [a-zA-Z ]{}
  11. -- 如: [a-zA-Z ]{10}  ...  一个十字符的字符串
  12. -- 获得字符串长度
  13. SET @intLength = LEN(@vchSourceString)
  14. -- 设置完整的正则表达式
  15. SET @vchRegularExpression = '[a-zA-Z ]{' + CAST(@intLength as varchar) + '}'
  16. -- 是否有任何特殊字符
  17. SET @bitHasNoSpecialCharacters = dbo.find_regular_expression(@vchSourceString, @vchRegularExpression,0)
  18. PRINT @vchSourceString
  19. IF @bitHasNoSpecialCharacters = 1 BEGIN
  20.  PRINT 'No special characters.'
  21. END ELSE BEGIN
  22.  PRINT 'Special characters found.'
  23. END
  24. PRINT '**************'
  25. -- 获得字符串长度
  26. SET @intLength = LEN(@vchSourceString2)
  27. -- 设置完整的正则表达式
  28. SET @vchRegularExpression = '[a-zA-Z ]{' + CAST(@intLength as varchar) + '}'
  29. -- 是否有任何特殊字符
  30. SET @bitHasNoSpecialCharacters = dbo.find_regular_expression(@vchSourceString2, @vchRegularExpression,0)
  31. PRINT @vchSourceString2
  32. IF @bitHasNoSpecialCharacters = 1 BEGIN
  33.  PRINT 'No special characters.'
  34. END ELSE BEGIN
  35.  PRINT 'Special characters found.'
  36. END
  37. GO
 
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值