SQL Server:多次换行后提取字符串,直到字符串后换行

时间:2019-03-01 17:03:07

标签: sql sql-server

我在具有多个换行符和可能还有回车符的字段中有文本,此后有字符串,然后有更多的换行符和回车符。我想在换行/回车直到下一个换行之前提取文本。因此,从下面的示例中,我想提取一行Some text。数字将突出显示回车/换行,而不是实际的字段数据。

示例(行号仅用于演示)

1
2
3
4
5 Some text
6
7 Some more text
8
9 Even more text

预期的输出(第一行不为空):

Some text

2 个答案:

答案 0 :(得分:2)

对我来说,就像您只需要在回车符上拆分此字符串一样。然而,挑战在于大多数拆分器(即使是Microsoft拆分器)也不返回元素编号。幸运的是,杰夫·摩登(Jeff Moden)拥有一个分离器,可以很好地用于此类事情。它还有其他一些限制,但在这里效果很好。您可以阅读有关拆分器here的信息。确保阅读评论,并在其中进行冗长的讨论。

使用在该文章中发现的DelimitedSplit8K,这很简单。

declare @Something table(SomeVal varchar(500))

insert @Something
select char(13) + char(13) + char(13) + 'Some text' + char(13) + 'more text'

select top 1 x.Item
from @Something s
cross apply dbo.DelimitedSplit8K(s.SomeVal, char(13))x
where x.Item > ''
order by x.ItemNumber

答案 1 :(得分:0)

感谢您的回应,我最终编写了下面的代码,并按我的要求完成了工作,因此最终没有使用DelimitedSplit8K,但将来可能会有用。

,大小写charindex(char(10),[Field])      当为0时[字段]      其他      SUBSTRING([Field],PATINDEX('%[^'+ CHAR(10)+']%',[Field]),     情况PATINDEX('%[^'+ CHAR(13)+ CHAR(10)+']%',[Field])-charindex(char(10),[Field],PATINDEX('%[^'+ CHAR( 10)+']%',[Field]))-(PATINDEX('%[^'+ CHAR(10)+']%',[Field]))        当为0时(LEN([Field])-charindex(char(10),[Field],PATINDEX('%[^'+ CHAR(10)+']%',[Field]))))        其他        charindex(char(10),[Field],PATINDEX('%[^'+ CHAR(10)+']%',[Field]))-(PATINDEX('%[^'+ CHAR(10)+' ]%',[领域]))        结束         )     以[Field]结尾