我的列中包含一些<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
,但我最终得到了很多硬编码的#:(。
答案 0 :(得分: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
修改
基于this question here,如何:
SELECT STUFF(STUFF(@x, CHARINDEX('</p>', @x), 4, ''),
CHARINDEX('<p>', @x), 3, '')