SQL Server 2005: 正则表达式使模式匹配和数据提取变得更容易
2009-02-10 10:20:07 来源:WEB开发网数据提取
正则表达式的分组功能可用于从字符串中提取数据。我的 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' )
邮箱列将返回电子邮件地址的邮箱或用户名。域列将返回电子邮件地址的域。
- ››sql server自动生成批量执行SQL脚本的批处理
- ››sql server 2008亿万数据性能优化
- ››SQL Server 2008清空数据库日志方法
- ››sqlserver安装和简单的使用
- ››SQL Sever 2008 R2 数据库管理
- ››SQL SERVER无法安装成功,sqlstp.log文件提示[未发...
- ››Sql Server中通过父记录查找出所有关联的子记录
- ››SqlServer触发器、存储过程和函数
- ››SQL Server 中的事务(含义,属性,管理)
- ››Sqlite数据库插入和读取图片数据
- ››Sql server 2005拒绝了对对象 'xx表' (数...
- ››Sql server 2005拒绝了对对象 'xx表' (数...
更多精彩
赞助商链接