SQLSERVER 中如何写System.Text.RegularExpressions的Regex函数

Technorati 标签: SQLSERVER, Regex, Function

最近有一个项目.需要用到正则表达式检索数据.

不料客户数据库是使用 SQL2000数据库.因此不能使用CLR来做这个事情了.

郁闷了很久.自己也不会写.问了很多朋友多说不会.

于是Google : SQL Regex .呵呵.终于惊喜出现了.

在 国外一个 网站 发现了这个函数.

地址我贴出来.尊重人家的劳动成果.

http://www.sqlteam.com/article/regular-expressions-in-t-sql

下面是 创建该函数

    
    
    
    
1 Create FUNCTION dbo.find_regular_expression
2 (
3 @source varchar ( 5000 ),
4 @regexp varchar ( 1000 ),
5 @ignorecase bit = 0
6 )
7   RETURNS bit
8   AS
9 BEGIN
10 DECLARE @hr integer
11 DECLARE @objRegExp integer
12 DECLARE @objMatches integer
13 DECLARE @objMatch integer
14 DECLARE @count integer
15 DECLARE @results bit
16
17 EXEC @hr = sp_OACreate ' VBScript.RegExp ' , @objRegExp OUTPUT
18 IF @hr <> 0 BEGIN
19 SET @results = 0
20 RETURN @results
21 END
22
23
24 EXEC @hr = sp_OASetProperty @objRegExp , ' Pattern ' , @regexp
25 IF @hr <> 0 BEGIN
26 SET @results = 0
27 RETURN @results
28 END
29 EXEC @hr = sp_OASetProperty @objRegExp , ' Global ' , false
30 IF @hr <> 0 BEGIN
31 SET @results = 0
32 RETURN @results
33 END
34 EXEC @hr = sp_OASetProperty @objRegExp , ' IgnoreCase ' , @ignorecase
35 IF @hr <> 0 BEGIN
36 SET @results = 0
37 RETURN @results
38 END
39 EXEC @hr = sp_OAMethod @objRegExp , ' Test ' , @results OUTPUT, @source
40 IF @hr <> 0 BEGIN
41 SET @results = 0
42 RETURN @results
43 END
44
45 EXEC @hr = sp_OADestroy @objRegExp
46 IF @hr <> 0 BEGIN
47 SET @results = 0
48 RETURN @results
49 END
50 RETURN @results
51 END
52 GO
53  

 

 

 

当然执行创建这个function是没有问题是.

但是在调用这个 function的时候就出现问题了.大致是说一些高级配置项没有打开,因此不支持函数内部的一些操作.,翻阅了 MSDN的帮助文档.

 

接下来.

    
   
   
   
      
     
     
     
sp_configure ' show advanced options ' , 1 ;
GO
RECONFIGURE ;
GO
sp_configure
' Ole Automation Procedures ' , 1 ;
GO
RECONFIGURE ;
GO
EXEC sp_configure ' Ole Automation Procedures ' ;
GO

 

ok 一切都搞定了.

最后测试这个函数是否达到我们需要的目的.

 

   
   
   
   
Select dbo.find_regular_expression( ' 139******** ' , ' ^1(3[4-9]|5[012789]|8[78])\d{8}$ ' , 0 )

 

 

这个就是 验证这个手机号码是否为移动号码囖

最后想说. 2000数据库真的是过时了.CLR In SQL 确实很好强大.

你可能感兴趣的:(SQLSERVER 中如何写System.Text.RegularExpressions的Regex函数)