2010-12-15 25 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. 此字符串是 表中的一列,我需要這些更改後更新同 列。

  2. 正如我在我的問題 ,我不只是想取代 和刪除模式,但與 取代 的### TaskDefId = seomnumber ###已經解釋「階段更改:」如果最後出現 的模式和當前的 是完全一樣的,如果最後一個 發生模式和 當前是不同的。

感謝

+0

你能告訴我們你的表結構是什麼樣的嗎?最重要的是:這個列有什麼**數據類型**包含這些數據? – 2010-12-15 14:05:25

+0

謝謝@marc_s。 DataType是VARCHAR(MAX),我在一個名爲NotesHistory的列中有這個字符串,並且我必須在這些更改後更新相同的列 – Kashif 2010-12-15 14:24:06

+1

這似乎更適合於應用程序級別(特別是在只執行替換的情況下,前一個是相同)。找到一種您熟悉的語言,並可以連接到數據庫,提取數據,執行清理,然後繼續。如果有很多行,添加一個「已清理」列可能是明智的,因此您可以將其批量關閉。 – 2010-12-15 14:38:40

回答

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 2010-12-15 14:27:33

+0

哦,那麼你將不得不編寫自己的邏輯來查找,比較和替換/刪除字符串中的### TaskDefId = somenumber ###。你將會使用很多PATINDEX,SUBSTRING,REPLACE等。你有一些非常髒的字符串操作。我建議你找到更高級別的其他解決方案來避免這一切。留下這樣的字符串操作作爲最後的手段。 – pavanred 2010-12-15 14:44:15

+0

感謝您的建議人。 – Kashif 2010-12-15 14:58:48

相關問題