WEB开发网
开发学院数据库MSSQL Server SQL Server 2005: 正则表达式使模式匹配和数据提取... 阅读

SQL Server 2005: 正则表达式使模式匹配和数据提取变得更容易

 2009-02-10 10:20:07 来源:WEB开发网   
核心提示: 数据提取正则表达式的分组功能可用于从字符串中提取数据,我的 RegexGroup 函数为 T-SQL 提供了此功能: [SqlFunction]public static SqlChars RegexGroup(SqlChars input, SqlString pattern, SqlS

数据提取

正则表达式的分组功能可用于从字符串中提取数据。我的 RegexGroup 函数为 T-SQL 提供了此功能:

[SqlFunction]
public static SqlChars RegexGroup(
  SqlChars input, SqlString pattern, SqlString name )
{
  Regex regex = new Regex( pattern.Value, Options );
  Match match = regex.Match( new string( input.Value ) );
  return match.Success ?
    new SqlChars( match.Groups[name.Value].Value ) : SqlChars.Null;
}

此函数同 RegexMatch 函数一样可创建 Regex 对象。然而,Match 对象并非用于测试匹配而是为在输入字符串中找到的第一个匹配项创建的。Match 对象用于检索指定的组。如果在输入中未找到匹配项,则返回空值。如果您喜欢用编号组而非命名组,则此函数仍然有效。仅将整数值传递给 SQL 代码中的函数,它会隐式地转换为 nvarchar 并且返回相应的组。

您可以在 SELECT 列表中使用 RegexGroup 函数来从其他一些数据片段中提取特定的信息片段。例如,如果您有一个存储了 URL 的列,您现在可以轻松地分析此 URL 以确定各个片段。此查询使用分组来确定存储在 UrlTable 表的 Url 列中的每个不同的服务器。

select distinct dbo.RegexGroup( [Url],
  N'https?://(?<server>([w-]+.)*[w-]+)', N'server' )
from [UrlTable]

您还可以在计算列中使用此函数。下面的表定义将电子邮件地址分为邮箱和域。

CREATE TABLE [Email]
(
  [Address] nvarchar(max),
  [Mailbox] as dbo.RegexGroup( [Address],
    N'(?<mailbox>[^@]*)@', N'mailbox' ),
  [Domain] as dbo.RegexGroup( [Address], N'@(?<domain>.*)', N'domain' )

邮箱列将返回电子邮件地址的邮箱或用户名。域列将返回电子邮件地址的域。

上一页  1 2 3 4 5 6 7 8 9 10  下一页

Tags:SQL Server 正则

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接