T-SQL中使用正则表达式函数
程序员文章站
2023-12-16 20:20:58
首先,我们在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
复制代码 代码如下:
/// <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