0

我有一个 HTML 字段,其中包含从 word 文档中提取的整个网页的 HTML。

在此 HTML 中可以包含以下内容:

<p>Please refer to &lt;|Any combination of words|&gt; policy.</p>

|和我之间的任何东西都|需要捕捉。诀窍是整个文档中有多个|'s,所以它只需要是|'sbetween Please refer to and policy

然后我需要用 HTML 链接替换它<a href="Any combination of words">Any combination of words</a>

因此,如果我在下面运行代码:

<p>Please refer to &lt;|Specific Policy Name|&gt; policy.</p>

它将替换&lt;|Specific Policy Name|&gt;为:

<a href="Specific Policy Name">Specific Policy Name</a>

这可以用 SQL 实现吗?

4

1 回答 1

1

试试这个解决方案:

SET NOCOUNT ON;

DECLARE @MyTable TABLE
(
    ID INT IDENTITY(1,1) PRIMARY KEY,
    OldContent NVARCHAR(MAX) NOT NULL,
    NewContent NVARCHAR(MAX) NULL
);
INSERT INTO @MyTable (OldContent)
VALUES (N'<p>Please refer to &lt;|Specific Policy Name&lt;| policy.</p>');

WITH UpdateCTE
AS
(
    SELECT b.NewContent,STUFF(b.InnerText,b.StartIndex-5,b.EndIndex-b.StartIndex+10,'<a href="'+b.[Text]+'">'+b.[Text]+'</a>') AS ChangedText
    FROM
    (
        SELECT  a.*,SUBSTRING(a.InnerText,a.StartIndex,a.EndIndex-a.StartIndex) AS [Text]
        FROM
        (
            SELECT  PATINDEX('%Please refer to &lt;|%',t.OldContent)+21 AS StartIndex,
                    PATINDEX('%&lt;| policy.%',t.OldContent) AS EndIndex,
                    t.OldContent AS InnerText,
                    t.NewContent
            FROM    @MyTable t
        ) a
    ) b
)
UPDATE  UpdateCTE
SET     NewContent = ChangedText;

SELECT  *
FROM    @MyTable x;

结果:

ID  OldContent                                                    NewContent
--- ------------------------------------------------------------- ------------------------------------------------------------------------------------
1   <p>Please refer to &lt;|Specific Policy Name&lt;| policy.</p> <p>Please refer to <a href="Specific Policy Name">Specific Policy Name</a> policy.</p>
于 2013-08-16T19:37:16.927 回答