gpt4 book ai didi

sql - 创建一个内联表函数来剥离 HTML

转载 作者:行者123 更新时间:2023-12-04 23:51:25 24 4
gpt4 key购买 nike

我正在尝试创建一个内联表函数来去除 HTML(以便我可以 CROSS APPLY 它与另一个表)。我们有一个标量函数,但性能还不够好。

我对使用 T-SQL 真的很陌生,所以我不知道它有多少好的做法,所以如果有人有任何建议,请告诉我!

这是我目前所拥有的:

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

CREATE FUNCTION StripHTML
(
@text VARCHAR(MAX)
)
RETURNS TABLE
AS
RETURN
WITH BracketIndexes (startIndex, stopIndex) AS (SELECT
CHARINDEX('<', @text),
CHARINDEX('>', @text) UNION ALL SELECT
CHARINDEX('<', @text, stopIndex + 1),
CHARINDEX('>', @text, stopIndex + 1)
FROM BracketIndexes
WHERE startIndex > 0 AND stopIndex > 0
)
SELECT * FROM BracketIndexes

现在我有了 < 所在位置的索引s 和 >是,我不确定如何:

  • 删除这些索引之间的内容
  • 返回字符串以便我可以交叉应用它

我想我可以使用 LEFT 连接每个括号的左侧和右侧/RIGHT ,但我似乎无法获得正确的索引。

编辑:

这有点奏效:

DECLARE @text VARCHAR(100) = 'HELLO <B>WORLD</B> asd';

WITH BracketIndexes (startIndex, stopIndex) AS (
SELECT
CHARINDEX('<', @text),
CHARINDEX('>', @text)
UNION ALL
SELECT
CHARINDEX('<', @text, stopIndex + 1) - (stopIndex - startIndex + 1),
CHARINDEX('>', @text, stopIndex + 1) - (stopIndex - startIndex + 1)
FROM BracketIndexes
WHERE startIndex > 0 AND stopIndex > 0
)
SELECT @text = LEFT(@text, startIndex - 1) + RIGHT(@text, LEN(@text) - stopIndex)FROM BracketIndexes WHERE startIndex > 0 AND stopIndex > 0
SELECT @text

但是当我在 @text 中添加了更多 HTML 语句时, RIGHT有一个不正确的长度参数。

最佳答案

您走在正确的道路上。对于 CTE 的每次递归,您基本上希望使用 REPLACE() 和 SUBSTRING() 的组合将一个 HTML 元素替换为空白:

DECLARE @text varchar(max) = '<a href="">Cool!</a><b>oh yeah!</b>'  

;WITH BracketIndexes (rowNumber, original, startIndex, stopIndex, replaced) AS (SELECT
1,
@text,
CHARINDEX('<', @text),
CHARINDEX('>', @text),
REPLACE(@text,SUBSTRING(@text,CHARINDEX('<', @text),CHARINDEX('>', @text)),'') UNION ALL SELECT
rowNumber+1,
replaced,
CHARINDEX('<', replaced),
CHARINDEX('>', replaced),
REPLACE(replaced,SUBSTRING(replaced,CHARINDEX('<', replaced),CHARINDEX('>', replaced)),'')
FROM BracketIndexes
WHERE startIndex > 0 AND stopIndex > 0
)
SELECT TOP 1
replaced
FROM
BracketIndexes
ORDER BY RowNumber DESC

关于sql - 创建一个内联表函数来剥离 HTML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33154707/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com