2

我有一列,其中包含 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

结果我需要得到以下列表:

  • 第一列中的链接1 第一列中的href域中的链接1 img链接
  • 第二列中的链接 2 第二列中的 href 域中的链接 2 img2 链接

谁能帮我找到这个,因为我完全不知道该怎么做,而且我不擅长使用 sql。

4

1 回答 1

1

好吧,您可以charindex尝试查找索引,http://然后您需要找到 URL 的结尾(这取决于您的数据、空格或“)。

你也可以写CLR标量函数,实现正则表达式find

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
于 2012-10-24T13:30:01.897 回答