我有一列具有一些<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,但最终得到了很多硬编码的#::。

最佳答案

这很丑陋,但应该可以。该代码基本上找到了</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


编辑:

基于this question here,如何:

SELECT STUFF(STUFF(@x, CHARINDEX('</p>', @x), 4, ''),
    CHARINDEX('<p>', @x), 3, '')

10-07 15:29