SQL Server 2000 中使用正则表达式

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值