2010-06-09 53 views
2

目前我有varchar字段。分隔符是「$ P $ P $」。SQL Server中的字符串更新

分隔符在varchar數據中至少出現一次,最多出現兩次。

例如,

Sample Heading$P$P$Sample description$P$P$Sample conclusion 

Sample Heading$P$P$Sample Description 

如果分隔符出現兩次,我需要在分隔符第二次出現之前插入文本。

如:

Sample Heading$P$P$Sample DescriptionINSERT TEXT HERE$P$P$Sample Conclusion 

如果只發生一次的分隔符,然後我需要插入在該領域的最終文本。

如:

Sample Heading$P$P$Sample DescriptionAPPEND TEXT HERE 

如何這可以在SQL查詢來完成?

+4

我可以奪取三個獨立的領域? – Nate 2010-06-09 18:47:49

回答

1

如果您要進行大量的字符串操作,您可能需要使用CLR(.net)函數。由於SQL Server並不是完全用於字符串操作的。

甚至更​​好,將這些數據返回到您的應用程序,並在代碼中執行。

我甚至覺得使用默認SQL Server String functions

0

CHARINDEX函數有一個可選的第三個參數,使您可以指定搜索的起始位置,你不能做到這一點。你可以使用CharIndex查找第二次出現的字符串。您也可以使用stuff函數將字符串插入到另一個字符串中。

例子:

Declare @Temp Table(Data VarChar(8000)) 

Insert Into @Temp Values('Sample Heading$P$P$Sample description$P$P$Sample conclusion') 
Insert Into @Temp Values('Sample Heading$P$P$Sample Description') 

Select len(Data), 
     CharIndex('$P$P$', Data + '$P$P$',CharIndex('$P$P$',Data) + 1), 
     Stuff(Data + ' ', CharIndex('$P$P$', Data + '$P$P$',CharIndex('$P$P$',Data) + 1), 0, 'Text Here') 
From @Temp 

我知道它看起來像一個爛攤子,但我鼓勵你理解它是如何工作的,因爲你可能需要在未來類似的事情。

0

而不是使用分隔符,爲什麼不創建3列,或者如果你只想要一個 - >一個XML字段?