0

我有一个从数据库返回数据的查询。在单个字段中,有一段相当长的文本注释,其中包含一个段,它用 和 之类的标记标签明确!markerstart!定义!markerend!。我想要一个查询返回,其中两个标记之间的字符串段被移除(并且标记也​​被移除)。

在我取回数据后,我通常会在客户端执行此操作,但是,问题是查询是INSERT从语句中获取数据的查询SELECT。我不希望将文本段存储在存档/报告表中(在此处使用 OLTP 应用程序),因此我需要找到一种方法来让SELECT语句准确返回要插入的内容,在这个case,意味着让SELECT语句去除不需要的短语,而不是在后处理客户端中进行。

我唯一的想法是使用, 和的一些复杂组合SUBSTRING,但我希望有更好的方法,但是,基于,我不知道如何。有人有想法吗?CHARINDEXCONCAT

样本:

这是数据库中某个字段中的一长串文本,其中包含需要删除的段。!markerstart! 这是要删除的段。它的长度是未知的和可变的。!标记!该字段中出现在标记之后的部分应保留。

结果:

这是数据库中某个字段中的一长串文本,其中包含需要删除的段。该字段中出现在标记之后的部分应保留。

使用材料的解决方案:

我真的不喜欢这是多么冗长,但如果我真的需要,我可以把它放在一个函数中。这并不理想,但它比 CLR 例程更容易和更快。

SELECT STUFF(CAST(Description AS varchar(MAX)), CHARINDEX('!markerstart!', Description), CHARINDEX('!markerend!', Description) + 11 - CHARINDEX('!markerstart!', Description), '') AS Description
FROM MyTable
4

2 回答 2

2

您可能需要考虑实现一个返回已分析数据的 CLR 用户定义函数。

以下链接演示了如何使用 CLR UDF RegEx 函数进行模式匹配和数据提取。

http://msdn.microsoft.com/en-us/magazine/cc163473.aspx

问候,

于 2013-09-26T14:07:18.233 回答
0

您可以使用 Stuff 功能或 Replace 功能并将不需要的符号替换为 ''。STUFF('EXP',START_POS,'NUMBER_OF_CHARS','REPLACE_EXP')

于 2013-09-26T12:43:25.147 回答