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

首先,我们在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

(0)
上一篇 2022年3月21日
下一篇 2022年3月21日

相关推荐