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です。

CHARINDEXandを使用してみSUBSTRINGましたが、多くのハードコーディングされた # :( .

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 に答える