2010-06-09 40 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字段?