2010-12-15 19 views
0

を文字列からテキストを置換し、削除し、それがサンプル私は次のような文字列を持つSQL Serverの中で

<b>22/10 - 10:47 - wes:</b> ###TaskDefId=46###N Enq - Send Quote<b><br/>29/10 - 15:55 - grn: Some Text ###TaskDefId=31### ABC - DEFG HIJ<b><br/>22/10 - 12:29 - white: .... 

で、これは完全な文字列では、以下を参照してください、上記のようなオリジナルのルックスは、私がbbrを削除しましたタグを使用するとより明確になります。それぞれの行の最後に、私が削除したいものと置きたいものを書き留めます。

22/10 - 10:47 - wes: ###TaskDefId=46###N Enq - Send Quote    '###TaskDefId=46###N Enq - Send Quote' This should be removed completely 
29/10 - 15:55 - grn: Some Text ###TaskDefId=31### ABC - DEFG HIJ   '###TaskDefId=31###' This should be replaced with 'STAGE CHNAGED:' 
22/10 - 12:29 - white: Eamiled ###TaskDefId=31### Qtd - Email and Email  '###TaskDefId=31###Qtd - Email and Email' This should be removed completely because last stage was exactly same 
29/10 - 16:26 - wesl: Spoke ###TOaskDefId=48### CTD - DDDDDD   '###TOaskDefId=48###' This should be replaced with 'STAGE CHANGED:' becaue last stage was different 
09/12 - 13:12 - wesl: Spoke ###TaskDefId=31### CTD - DDDDDD   '###TaskDefId=31###' This should be replaced with 'STAGE CHANGED:' becaue last stage was different 
15/11 - 18:41 - white: Some xxxx ###TaskDefId=31### DDD AND - CDD TDED  '###TaskDefId=31###' This should be removed. 
09/12 - 13:12 - wesl: Balanced ###TaskDefId=23### SDTED DERDDW   '###TaskDefId=23###' This should be replaced with 'STAGE CHANGED:' 

質問はメモ帳にコピーして貼り付けてください乱雑に見えると私は質問が意味をなすことを願っています。これは別の行ではない1つの文字列であることをもう一度教えてください。

EDIT:

  1. この文字列は テーブルの1列にあると私は、これらの変更後に同じ 列を更新する必要があります。

  2. は、私は私の質問私はちょうど を交換してパターンを除去するが、 で ### TaskDefId = seomnumber ###を交換したくない で説明したように「STAGEはCHANGED:」場合は、最後に出現現在のパターン の は、最後に パターンの出現と現在の が異なる場合は全く同じで削除されています。

おかげであなたが使用することができます

+0

あなたのテーブル構造がどのように見えるか教えてください。最も重要なのは、このデータが入っているのはどの**データ型**ですか? –

+0

ありがとう@marc_s。 DataTypeはVARCHAR(MAX)であり、NotesHistoryという名前の列にこの文字列があり、これらの変更後に同じ列を更新する必要があります。 – Kashif

+1

これはアプリケーションレベルでより適合しているようです(特に置き換えを実行するような場合は、同じ)。快適な言語を見つけて、データベースに接続したり、データを抽出したり、クリーンアップを実行したりしてください。たくさんの行がある場合は、 "cleaned_up"列を追加して一括処理することをお勧めします。 –

答えて

0

-

SELECT REPLACE (string_expression , string_pattern , string_replacement) 
GO 

しかし、あなたの文字列に私はあなたが交換したい多くのパターンを参照してください。さて、あなたはあなたが交換したいすべてのパターンを交換したまで、これを繰り返し行う必要があります

Declare @String_Original nvarchar(max) 
DECLARE @Replacement1 nvarchar(50) 
DECLARE @Pattern1 nvarchar(50) 

@String_Original = 'your string' 
@Pattern1 = '###TaskDefId=31###' 
@Replacement1 = 'STAGE CHNAGED:' 

SELECT REPLACE(@String_Original,@Pattern1,@Replacement) 

- 私はあなたのようなものを使用することができますお勧めします。おそらく、

のようなもの -

DECLARE @Replacement2 nvarchar(50) 
DECLARE @Pattern2 nvarchar(50) 

@String_Original = 'your string' 
@Pattern2 = '###TaskDefId=46###N Enq - Send Quote' 
@Replacement2 = '' 

SELECT REPLACE(@String_Original,@Pattern2,@Replacement2) 

そして、交換するすべてのパターンのためにこれを行います。しかし、置き換えられるパターンが動的で、事前にそれを知っていないとすれば、私は単純で、まっすぐな前進があなたを助けないだろうと恐れています。ロジックを持つ関数またはストアドプロシージャを記述して、パターンを見つけて置き換える必要があります。

+0

におかなければなりません@Pavanredに感謝しますが、### TaskDefId = somenumber ##を置き換えるか削除する必要があります#パターンの前のオカレンスに関連して。すなわち、パターンの前の最後の出現が全く同じであればそれを除去し、そうでなければそれを置き換える。 – Kashif

+0

あなたはあなたの文字列から### TaskDefId = somenumber ###を見つけ、比較して置き換えたり、削除したりする独自のロジックを書く必要があります。あなたはPATINDEX、SUBSTRING、REPLACEなどをたくさん使っています。あなたは非常に汚い文字列の操作をしています。私はこれを避けるために、より高いレベルで他のソリューションを見つけることをお勧めします。あなたの最後の手段として、そのような文字列操作を残す。 – pavanred

+0

提案の男性に感謝します。 – Kashif

関連する問題