动态嵌套替换

时间:2017-11-10 18:39:01

标签: sql sql-server

我正在使用SQL Server 2008,需要在字符串中删除相当多的数据。由于字符串的性质和可变性,我认为我需要使用多个嵌套的REPLACE命令。问题是REPLACE需要在前一个版本的基础上构建。以下是我正在查看的示例:

<Paragraph><Replacement Id="40B"><Le><Run Foreground="#FFFF0000">Treatment by </Run></Le><Op isFreeText="True"><Run Foreground="#FFFF0000">test</Run></Op><Tr><Run Foreground="#FFFF0000">.  </Run></Tr></Replacement></Paragraph>

基本上,我需要它只返回&lt;&gt;之外的文本括号所以对于这个例子它将是:

Treatment by test.  

另外,我想提及&lt;&gt;内的字符串根据内容和长度,每行的括号可以有很大的不同,但除了使更换更复杂之外,它与我所需要的不相关。

这是我尝试过的:

REPLACE(note,substring(note,patindex('<%>',note),CHARINDEX('>',note) - CHARINDEX('<',note) + 1),'')

它返回:

<Replacement Id="40B"><Le><Run Foreground="#FFFF0000">Treatment by </Run></Le><Op isFreeText="True"><Run Foreground="#FFFF0000">test</Run></Op><Tr><Run Foreground="#FFFF0000">.  </Run></Tr></Replacement></Paragraph>

不知何故,我需要继续更换每个&lt;&gt;括号但不知道如何进行。任何帮助或指导将不胜感激!!!

1 个答案:

答案 0 :(得分:0)

根据您拥有HTML片段的字符串的不同,您可以尝试使用以下内容:

SELECT convert(xml, '<Paragraph><Replacement Id="40B"><Le><Run Foreground="#FFFF0000">Treatment by </Run></Le><Op isFreeText="True"><Run Foreground="#FFFF0000">test</Run></Op><Tr><Run Foreground="#FFFF0000">.  </Run></Tr></Replacement></Paragraph>').value('/', 'varchar(255)') as stripped

您将其转换为XML,然后使用内置的xml解析器函数&#34; value&#34;。