Sql server 2012 从SQL Server 2012文本字段中提取字符串

Sql server 2012 从SQL Server 2012文本字段中提取字符串,sql-server-2012,Sql Server 2012,我有一个名为description的文本字段,它列出了很多信息,我想提取特定单词之间的字符串。文本值示例: 一般好处:本文的目的是解释使用我们的产品的好处 健康因素:请查看我们的网站获取完整列表 注释:用户添加的任何注释都在此处输入 联系我们:请致电xxx xxx xxxx与我们联系 一般益处、健康因素、评论和联系方式将始终显示在文本字段中,但每个字段后面的声明是不同的。 输出应提取这四个字符串之间的字符串: 这似乎可以满足您的需求-希望有用。我相信有更好的方法可以做到这一点:) 为了完整起见,

我有一个名为description的文本字段,它列出了很多信息,我想提取特定单词之间的字符串。文本值示例:

一般好处:本文的目的是解释使用我们的产品的好处

健康因素:请查看我们的网站获取完整列表

注释:用户添加的任何注释都在此处输入

联系我们:请致电xxx xxx xxxx与我们联系

一般益处、健康因素、评论和联系方式将始终显示在文本字段中,但每个字段后面的声明是不同的。 输出应提取这四个字符串之间的字符串:

这似乎可以满足您的需求-希望有用。我相信有更好的方法可以做到这一点:)

为了完整起见,我在临时表中创建了一个包含两行的测试用例,因为我假设您有许多要处理的行

CREATE TABLE #Test (Txt NVARCHAR(MAX))

INSERT INTO #Test (Txt) VALUES
(N'General Benefits: The purpose of this is to explain the benefits from using our products. Health Factors: Please check out our website for a complete list. Comments: Any comment added by the user is entered here. Contact Us: Please call us at xxx-xxx-xxxx'),
(N'General Benefits: Some other benefits. Health Factors: Some other factors. Comments: Love your work. Contact Us: Call us zzz-zzz-zzzz');


DECLARE @PAT1 NVARCHAR(MAX) = N'General Benefits:';
DECLARE @PAT2 NVARCHAR(MAX) = N'Health Factors:';
DECLARE @PAT3 NVARCHAR(MAX) = N'Comments:';
DECLARE @PAT4 NVARCHAR(MAX) = N'Contact Us:';



SELECT 
    SUBSTRING(Txt, A + LEN(@PAT1) + 1, B - A - LEN(@PAT1) - 1) 'General Benefits',
    SUBSTRING(Txt, B + LEN(@PAT2) + 1, C - B - LEN(@PAT2) - 1) 'Health Factors',
    SUBSTRING(Txt, C + LEN(@PAT3) + 1 , D - C - LEN(@PAT3) - 1) 'Comments',
    SUBSTRING(Txt, D + LEN(@PAT4) + 1 , LEN(Txt) - LEN(@PAT4) - 1) 'Contact Us'
FROM #Test 
CROSS APPLY (SELECT 
    A = PATINDEX('%'+@PAT1+'%', Txt), 
    B = PATINDEX('%'+@PAT2+'%',Txt),
    C = PATINDEX('%'+@PAT3+'%',Txt),
    D = PATINDEX('%'+@PAT4+'%',Txt)
) Q


General Benefits                                                                                                                                                                                                                                                 Health Factors                                                                                                                                                                                                                                                   Comments                                                                                                                                                                                                                                                         Contact Us
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
The purpose of this is to explain the benefits from using our products.                                                                                                                                                                                          Please check out our website for a complete list.                                                                                                                                                                                                                Any comment added by the user is entered here.                                                                                                                                                                                                                   Please call us at xxx-xxx-xxxx
Some other benefits.                                                                                                                                                                                                                                             Some other factors.                                                                                                                                                                                                                                              Love your work.                                                                                                                                                                                                                                                  Call us zzz-zzz-zzzz

(2 row(s) affected)

这篇文章有助于回答你的问题吗?谢谢你,丹尼尔。我试过了,但它并没有在我想要的地方分开绳子。我不清楚。是这样的吗:您有一个包含所有文本的字段,并且希望将其拆分为上表中的4个字段?请澄清,原始字段中到底是什么。您的文本分隔符是否始终按相同的顺序排列,并以cr/lf结尾,如示例所示?在原始文本字段中,我输入了文本,从“一般利益”开始,以“联系我们”行结束所需的输出是将此文本字段拆分为4个字段,如图所示。它们的顺序相同,由crlf终止。