日期:2014-05-18 浏览次数:20695 次
using System;
using System.Data.SqlTypes;
public partial class RegExp
{
    [Microsoft.SqlServer.Server.SqlFunction]
    public static SqlBoolean RegExp_Like(SqlString input,SqlString pattern)
    {
        if (input.IsNull || pattern.IsNull) return false;
        return System.Text.RegularExpressions.Regex.IsMatch(input.Value, pattern.Value);
    }
    [Microsoft.SqlServer.Server.SqlFunction]
    public static SqlString RegExp_Replace(SqlString input,SqlString pattern,SqlString replacement)
    {
        if (input.IsNull || pattern.IsNull || replacement.IsNull) return input;
        return new System.Text.RegularExpressions.Regex(pattern.Value).Replace(input.Value, replacement.Value);
    }
};
create database sqlclr
go
use sqlclr 
go
exec sp_configure 'clr enabled', '1'
go
reconfigure;
exec sp_configure 'show advanced options', '1';
go 
ALTER DATABASE sqlclr SET TRUSTWORTHY On
 go
CREATE ASSEMBLY SqlClr_RegEx FROM 'E:\sqlclrdata\SQLCLR_RegExp.dll' WITH PERMISSION_SET = UnSAFE;
--
go
CREATE FUNCTION dbo.ufn_RegExp_Like  
(  
    @input  nvarchar(max),
    @pattern  nvarchar(4000)
)    
RETURNS bit
AS EXTERNAL NAME SqlClr_RegEx.RegExp.RegExp_Like
go
CREATE FUNCTION dbo.ufn_RegExp_Replace  
(  
    @input  nvarchar(max),
    @pattern  nvarchar(4000),
    @replacement nvarchar(4000)
)    
RETURNS  nvarchar(max)
AS EXTERNAL NAME SqlClr_RegEx.RegExp.RegExp_Replace
set nocount on declare @t table(teststring varchar(50)) insert into @t select '上海市南京路100号2弄3号' insert into @t select 'jinjazz@sina.com.cn' insert into @t select '剪刀@msn.com' insert into @t select 'fdf98s' --获取合法邮箱 select * from @t where dbo.ufn_RegExp_Like(teststring,'\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*')>0 /* teststring -------------------------------------------------- jinjazz@sina.com.cn 剪刀@msn.com */ --替换数字 select dbo.ufn_RegExp_Replace(teststring,'[\d*$]','*') as newstring from @t /* newstring ------------------------------------------------- 上海市南京路***号*弄*号 jinjazz@sina.com.cn 剪刀@msn.com fdf**s */ set nocount off