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

来源:互联网 发布:流行的网络用语 编辑:程序博客网 时间:2024/05/16 23:57

文章摘自http://www.rzchina.net/forum/71

http://topic.csdn.net/u/20080605/11/55c273aa-2206-4ded-b6f6-508a7a755c6a.html
范例
用户提交: 枪as23!@#%$支
数据库 将过滤 枪(.*)支 这个词语
有多个过滤字符!!!!

请问存储过程如何写????

又或者用其他办法怎么做????

- - ¦
 

查看复制到剪切板打印

  1. create function F_Str(@Name nvarchar(100))   
  2. returns nvarchar(100)   
  3. as  
  4. begin  
  5. while patindex('%[枪(.*)]%',@Name)>0   
  6.     set @name=stuff(@Name,patindex('%[枪(.*)]%',@Name),1,'')   
  7. return @name  
  8. end  
  9. go   
  10. select dbo.F_Str('枪as23!@#%$支')  

create function F_Str(@Name nvarchar(100))
returns nvarchar(100)
as
begin
while patindex('%[枪(.*)]%',@Name)>0
set @name=stuff(@Name,patindex('%[枪(.*)]%',@Name),1,'')
return @name
end
go
select dbo.F_Str('枪as23!@#%$支')

方法2
 

查看复制到剪切板打印

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