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)

相关推荐

  • SQL中实现SPLIT函数几种方法总结(必看篇)

    例1 代码如下 create function f_split(@SourceSql varchar(8000),@StrSeprate varchar(10)) returns @temp table(a varchar(100)) --实现split功能 的函数 --date :2003-10-14 as begin declare @i int set @SourceSql=rtrim(ltrim(@SourceSql)) set @i=charindex(@StrSeprate,@Sou

  • SQL中的开窗函数详解可代替聚合函数使用

    在没学习开窗函数之前,我们都知道,用了分组之后,查询字段就只能是分组字段和聚合的字段,这带来了极大的不方便,有时我们查询时需要分组,又需要查询不分组的字段,每次都要又到子查询,这样显得sql语句复杂难懂,给维护代码的人带来很大的痛苦,然而开窗函数出现了,曙光也来临了.如果要想更具体了解开窗函数,请看书<程序员的SQL金典>,开窗函数在mysql不能使用. 开窗函数与聚合函数一样,都是对行的集合组进行聚合计算.它用于为行定义一个窗口(这里的窗口是指运算将要操作的行的集合),它对一组值进行操作,不

  • 一篇文章看懂SQL中的开窗函数

    目录 OVER的定义 OVER的语法 OVER的用法 OVER在聚合函数中使用的示例 SUM后的开窗函数 COUNT后的开窗函数 OVER在排序函数中使用的示例 ROW_NUMBER() RANK() DENSE_RANK() NTILE() 总结 OVER的定义 OVER用于为行定义一个窗口,它对一组值进行操作,不需要使用GROUP BY子句对数据进行分组,能够在同一行中同时返回基础行的列和聚合列. OVER的语法 OVER ( [ PARTITION BY column ] [ ORDER

  • PHP中的正则表达式函数介绍

    正则表达式(Regular Expression) 正则表达式系统: 1.POSIX 2.Perl PHP中使用的regex是PCRE: NOTE:PCRE(Perl兼容正则表达式,Perl Compatible Regular Expressions) PCRE语法: 1.定界符 必须成对出现,可以使用除0-9a-zA-Z\以外的任何字符 2.原子 1.正则需要匹配的可见和不可见字符都是原子 2.一个正则表达式最少含有一个原子 3.当需要匹配诸如"("."[".&

  • SQL中的ISNULL函数使用介绍

    ISNULL 使用指定的替换值替换 NULL. 语法 ISNULL ( check_expression , replacement_value ) 参数 check_expression 将被检查是否为 NULL的表达式.check_expression 可以是任何类型的. replacement_value 在 check_expression 为 NULL时将返回的表达式.replacement_value 必须与 check_expresssion 具有相同的类型. 返回类型 返回与 c

  • SQL中的开窗函数(窗口函数)

    目录 窗口函数 1.1 排序窗口函数rank 1.2 rank(), dense_rank(), row_number()区别 1.3 排序截取数据lag(),lead(),ntile(),cume_dist() 1.4 聚合函数作为窗口函数 1.5 over(- - rows between and ) 窗口函数 简单理解,就是对查询的结果多出一列,这一列可以是聚合值,也可以是排序值. 开窗函数一般就是说的是over()函数,其窗口是由一个 OVER 子句 定义的多行记录 开窗函数一般分为两类

  • 在SQL中使用convert函数进行日期的查询的代码

    曾经遇到这样的情况,在数据库的Meeting表中有PublishTime (DateTime,8)字段,用来存储一个开会时间,在存入时由于要指明开会具体时间,故格式为yyyy-mm-dd hh:mm:ss,而我们查询时是通过yyyy-mm-dd来进行的,即查询某一天的所有会议信息,这样如果通过select * from Meeting where PublishTime=@PublishTime (参数@PublishTime为yyyy-mm-dd格式)语句进行查询将无法得到正确结果,比如我们要

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

    首先,我们在VSTS中创建一Database Project,增一个class, 实现下面的一个方法: 复制代码 代码如下: /// <summary> /// Regs the ex match. /// </summary> /// <param name="inputValue">The input value.</param> /// <param name="regexPattern">The r

  • pandas dataframe 中的explode函数用法详解

    在使用 pandas 进行数据分析的过程中,我们常常会遇到将一行数据展开成多行的需求,多么希望能有一个类似于 hive sql 中的 explode 函数. 这个函数如下: Code # !/usr/bin/env python # -*- coding:utf-8 -*- # create on 18/4/13 import pandas as pd def dataframe_explode(dataframe, fieldname): temp_fieldname = fieldname

  • SQL中concat和substr组合运用解析

    目录 concat和substr组合运用 背景 脚本有放在最后一章进行分析 concat介绍 substr介绍 最后SQL语句分析 concat和substr组合运用 背景 最近客户要我给一个脚本说查数据,说是要 截取sql表中某一个字段的前5个数值 进行查找. 刚开始我以为很简单就接了下来开始想,想了之后发现并没有这么简单(自己太菜了),就去问朋友(大数据开发). 给了我 这两个函数(concat和substr)让我自己去玩 ,但是客户一直再催没办法只能找我们自己的开发写脚本. Ten min

随机推荐