1

我有一个带有 html 内容列的表格我需要的是从中选择所有当前的 href 内容,例如

select 'href="MyFirstPAge.aspx" <table><tr><td> href="http://www.test.com/2009/05/aa-bb.html" </td></tr></table> href="MySecondPage.aspx"' as content

我需要结果

  1. 我的第一页.aspx
  2. http://www.test.com/2009/05/aa-bb.html
  3. href="MySecondPage.aspx"

知道我该怎么做吗?

我需要所有行中的不同列表。

试过一个功能

create function dbo.GetLinks (@t nvarchar(max))
    returns @Links table (link nvarchar(max))
as
begin
    declare @strtpos int 
    SET @strtpos = PATINDEX('%href="http%.aspx"%', @t)
    declare @endpos int 
    SET @endpos = 0
    declare @lnk nvarchar(max)
    while @strtpos > 0
    begin
        select  @endpos = PATINDEX('%.aspx"%', @t)+ 5
          , @lnk = substring(@t ,@strtpos, @endpos - @strtpos +1) -- here is the error 
          , @t= RIGHT (@t, len(@t) - @endpos)
          , @strtpos = PATINDEX('%href="http%.aspx"%', @t)
        insert @Links values(@lnk )
    end 
    return
end
go

但是收到错误消息 536,级别 16,状态 5,行 1 传递给 SUBSTRING 函数的长度参数无效。

样本数据是

<a shape="rect" href="http://www.qwewqe.fda.gov/wqewqe/pdf8/wewe.pdf"

target="_blank">系统市场。

2010 年,一直在呼吁处理,
 target="_blank"> changes. </p><p style="text-align: justify">The  <a shape="rect" href="fghfghfgh.aspx" target="_blank">
 substantially equivalent.</a> </p><p style="text-align: justify">Per th </p><p style="text-align: justify">market. </p>
 <p style="text-align: justify">The <a shape="rect" href="asdd.aspx" target="_blank">sub.</a> </p><p style="text-align:

证明">也许

八分之一的修订版

评论家 5

我们

如果

sdfsdf

asd

萨斯达斯达

4

2 回答 2

0

这够了吗?

declare @t nvarchar(max), @strtPos1 int, @strtPos2 int, @strtPos3 int
set @t='href="MyFirstPAge.aspx" href="http://www.test.com/2009/05/aa-bb.html" href="MySecondPage.aspx"'

SET @strtPos1 = PATINDEX('%.aspx"%', @t)
SET @strtPos2 = PATINDEX('%.html"%', @t)
SET @strtPos3 = PATINDEX('%href="http%.aspx"%', @t)

select substring(@t, 1, @strtPos1+4) union
select substring(@t, @strtPos3, (@strtPos2+4)-@strtPos3) union
select substring(@t, @strtPos2+7, LEN(@t))

作为函数

CREATE FUNCTION dbo.GetLinks (@t NVARCHAR(MAX))
    RETURNS @Links TABLE (link NVARCHAR(MAX))
AS
BEGIN
    DECLARE @strtPos1 INT, @strtPos2 INT, @strtPos3 INT
    SELECT @strtPos1 = PATINDEX('%.aspx"%', @t), @strtPos2 = PATINDEX('%.html"%', @t), @strtPos3 = PATINDEX('%href="http%.aspx"%', @t)

    INSERT INTO @Links SELECT SUBSTRING(@t, 1, @strtPos1+4)
    INSERT INTO @Links SELECT SUBSTRING(@t, @strtPos3, (@strtPos2+4)-@strtPos3)
    INSERT INTO @Links SELECT SUBSTRING(@t, @strtPos2+7, LEN(@t))

    RETURN
END
GO
于 2012-12-28T07:51:29.700 回答
0

重写你的函数如下:

create function [dbo].[GetLinks] (@t nvarchar(max))
    returns @Links table (link nvarchar(max))
as
begin
    declare @strtpos int
    set @strtpos=100
    declare @endpos int 
    declare @lnk nvarchar(max)
    while @strtpos > 6
    begin
        set @strtpos = PATINDEX('%href="%', @t)+6
        if @strtpos>6 begin
            set @endpos = CHARINDEX ('"',@t,@strtpos+1)
            if @endpos>0 begin
                set @lnk = substring(@t ,@strtpos, @endpos - @strtpos)
                set @t= RIGHT (@t, len(@t) - @endpos)

                insert @Links values(@lnk )
            end
        end
    end 

    return
end

尝试以下示例后:

select * from dbo.GetLinks('hello world href="MyFirstPAge.aspx" <table><tr><td> href="http://www.test.com/2009/05/aa-bb.html" </td></tr></table> href="MySecondPage.aspx"') as links

它返回:

MyFirstPAge.aspx
http://www.test.com/2009/05/aa-bb.html
MySecondPage.aspx
于 2012-12-28T16:05:13.307 回答