3

我有一列有一些<p>标签,如:

<p>test  test 2</p>    <p>this is a test 2</p>    <p>this is a test 3</p>

什么是最好的方法总是删除第一个<p>对应的</p>.

这样结果就变成了:

test test 2 <p> this is a test 2 </p> <p> this is a test 3</p>

它应该适用于任何情况,即使<p>1</p>它应该导致1.

我尝试使用CHARINDEXSUBSTRING但最终得到了很多硬编码的 # :(。

4

1 回答 1

2

这很丑陋,但它应该可以工作。该代码基本上找到了第一个实例</p>并获取它右侧的所有内容。它还将所有内容都放在它的左侧,替换<p>它找到的第一个。

DECLARE @x nvarchar(100)
SET @x = '<p>test test 1</p> <p>this is a test 2</p> <p>this is a test 3</p>'

SELECT REPLACE(LEFT(@x, charindex('</p>', @x) - 1), '<p>', '') +  
    RIGHT(@x, len(@x) - charindex('</p>', @x) - 3)

SET @x = '<p>1</p>'

SELECT REPLACE(LEFT(@x, charindex('</p>', @x) - 1), '<p>', '') +  
    RIGHT(@x, len(@x) - charindex('</p>', @x) - 3)

这应该返回:

test test 1 <p>this is a test 2</p> <p>this is a test 3</p>

1

编辑

基于这个问题here,怎么样:

SELECT STUFF(STUFF(@x, CHARINDEX('</p>', @x), 4, ''), 
    CHARINDEX('<p>', @x), 3, '')
于 2012-11-06T14:39:37.330 回答