1

私はhtmlコンテンツ列を持つテーブルを持っています

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. MyFirstPage.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">システム rket。

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:

正当化">おそらく

1/8 リビジョンの t

評論家 5

私達

もしも

sdfsdf

asd

サスダスダス

4

2 に答える 2

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 に答える
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 に答える