在sql列中找到几个文本

时间:2012-10-24 13:24:03

标签: sql sql-server-2005

我有一个包含html详细信息的列,在每个列中,html包含不同的http链接。我需要找出每列中的所有http链接。

例如:第1栏第1行

html 
... 
a href = http://www.column1.com....... 
img src=http://www.pic1.com/images/im.jpg...
...
/html

第1栏第2行

html 
...
a href = http://www.column2.com.......  
img src="http://www.pic2.com/images/im.jpg".... 
/html

在结果中我需要获得以下列表:

  • 在href的第一列1中的link1 第一栏中的域名img链接
  • 在href中的第二列2中的link2 域名在第二栏img2链接

任何人都可以帮我找到这个,因为我根本不知道该做什么,而且我不善于使用sql。

1 个答案:

答案 0 :(得分:1)

您可以使用charindex尝试找到http://的索引,然后您需要找到网址的结尾(这取决于您的数据,空间或“)。

您还可以编写CLR标量函数,实现正则表达式查找

using System;
using System.Collections;
using System.Text.RegularExpressions;
using System.Data.SqlTypes;
using Microsoft.SqlServer.Server;

public class CLR
{
    [SqlFunction(FillRowMethodName = "FillRow")]
    public static IEnumerable RegexMatch(string pattern, string text)
    {
        var r = new Regex(pattern);
        return r.Matches(text);
    }

    public static void FillRow(Object obj, out SqlInt32 index, out SqlString match)
    {
        var m = (Match)obj;
        index = new SqlInt32(m.Groups[0].Index + 1);
        match = new SqlString(m.Groups[0].Value);
    }
}

然后,您需要从此类库

在SQL Server上创建程序集
create assembly CLR from 'C:\CLR.dll' with permission_set = safe

然后你可以创建功能

create function RegexMatch(@pattern nvarchar(4000), @text nvarchar(4000))
returns table ([index] int, match nvarchar(4000))
as external name CLR.CLR.RegexMatch