欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

T-SQL中使用正则表达式函数

程序员文章站 2023-12-11 17:48:04
首先,我们在vsts中创建一database project,增一个class, 实现下面的一个方法: 复制代码 代码如下: /// ///...
首先,我们在vsts中创建一database project,增一个class, 实现下面的一个方法:
复制代码 代码如下:

/// <summary>
/// regs the ex match.
/// </summary>
/// <param name="inputvalue">the input value.</param>
/// <param name="regexpattern">the regex pattern.</param>
/// <remarks>author: petter liu http://wintersun.cnblogs.com </remarks>
/// <returns>1 match,0 not match</returns>
[sqlfunction]
public static bool regexmatch(string inputvalue, string regexpattern)
{
// any nulls - we can't match, return false
if (string.isnullorempty(inputvalue) || string.isnullorempty(regexpattern))
return false;

regex r1 = new regex(regexpattern.trimend(null));
return r1.match(inputvalue.trimend(null)).success;
}

好了,build后deploy到你的target database就ok了,visualstudio会自动注册这个程序集的。如果,你想手动注册程序集,可执行以下的t-sql:
复制代码 代码如下:

create assembly [regexclr] from 'regexclr.dll';

-- add the regex function. we want a friendly name
-- regexmatch rather than the full namespace name.
-- note the way we have to specify the assembly.namespace.class.function
-- note the regexclr.regexclr
-- (one is the assembly the other is the namespace)
create function regexmatch ( @inputcalue nvarchar(4000),
@regexpattern nvarchar(4000) ) returns bit
as external name regexclr.regexclr.clrclass.regexmatch;

ok, 一切ok的后,我们来测试下:

select count(1) from threads where dbo.regexmatch(threadid,'^[{|\(]?[0-9a-fa-f]{8}[-]?([0-9a-fa-f]{4}[-]?){3}[0-9a-fa-f]{12}[\)|}]?$')=1
上面的t-sql是找出threads表threadid是guid的记录数。 等于1是匹配,^[{|\(]?[0-9a-fa-f]{8}[-]?([0-9a-fa-f]{4}[-]?){3}[0-9a-fa-f]{12}[\)|}]?$ 匹配guid的正则表达式。

完了,希望这篇post对您有帮助。

您可能对以下post感兴趣:

sqlserver2008中cte的split与clr的性能比较

sqlserver使用clr stored procedure导出数据到excel

上一篇:

下一篇: