最简单的方法是删除存储过程中两个不同单词的第一个实例

时间:2012-11-06 14:34:14

标签: sql-server tsql

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

1 个答案:

答案 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, '')