我有一个从数据库返回数据的查询。在单个字段中,有一段相当长的文本注释,其中包含一个段,它用 和 之类的标记标签明确!markerstart!
定义!markerend!
。我想要一个查询返回,其中两个标记之间的字符串段被移除(并且标记也被移除)。
在我取回数据后,我通常会在客户端执行此操作,但是,问题是查询是INSERT
从语句中获取数据的查询SELECT
。我不希望将文本段存储在存档/报告表中(在此处使用 OLTP 应用程序),因此我需要找到一种方法来让SELECT
语句准确返回要插入的内容,在这个case,意味着让SELECT
语句去除不需要的短语,而不是在后处理客户端中进行。
我唯一的想法是使用, 和的一些复杂组合SUBSTRING
,但我希望有更好的方法,但是,基于此,我不知道如何。有人有想法吗?CHARINDEX
CONCAT
样本:
这是数据库中某个字段中的一长串文本,其中包含需要删除的段。!markerstart! 这是要删除的段。它的长度是未知的和可变的。!标记!该字段中出现在标记之后的部分应保留。
结果:
这是数据库中某个字段中的一长串文本,其中包含需要删除的段。该字段中出现在标记之后的部分应保留。
使用材料的解决方案:
我真的不喜欢这是多么冗长,但如果我真的需要,我可以把它放在一个函数中。这并不理想,但它比 CLR 例程更容易和更快。
SELECT STUFF(CAST(Description AS varchar(MAX)), CHARINDEX('!markerstart!', Description), CHARINDEX('!markerend!', Description) + 11 - CHARINDEX('!markerstart!', Description), '') AS Description
FROM MyTable