我有一列具有一些<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
。我尝试使用
CHARINDEX
和SUBSTRING
,但最终得到了很多硬编码的#::。 最佳答案
这很丑陋,但应该可以。该代码基本上找到了</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, '')