如何从SQL String变量中提取特定的字符串部分

时间:2015-02-17 12:00:30

标签: sql xml sql-server-2008

我有一个Sql变量,它包含一个字符串值,并希望从该字符串值中提取特定部分,

Declare @val as nvarchar(1000),
       @outval as nvarchar(1000)

     set @val='<Message>
  <Header>
  <MessageID>000000015</MessageID>
  <MessageType>QualityData</MessageType>
   <Sender>Data</Sender>
  <Recipient>Data1</Recipient>
  <PublishedDate>2013-12-22T13:15:23</PublishedDate>
 </Header>
<Body>
 <ID>150105</ID>
 <Data>
   <Count>5</Count>
   <Brix>110</Brix>
   <CO2>110</CO2>
  </QualityData>
</Body>
</Message>'

现在我需要从使用sql查询中提取字符串。输出应如下所示。

      <Body>
<ID>150105</ID>
<Data>
  <Count>5</Count>
  <Brix>110</Brix>
  <CO2>110</CO2>
 </Data>
</Body>

使用SQL Server获取此格式的任何建议。

3 个答案:

答案 0 :(得分:0)

使用子字符串提取信息和patindex以查找起始字符和长度,如下所示:

Select Substring(@val,PATINDEX('%<body>%', @val),PATINDEX('%</body>%', @val) - PATINDEX('%<body>%', @val) + 7)

答案 1 :(得分:0)

此查询可能会对您有所帮助:

Declare @val as nvarchar(1000),
   @outval as nvarchar(1000),
   @start as int,
   @end as int,
   @len as int



 set @val='<Message>
  <Header>
  <MessageID>000000015</MessageID>
  <MessageType>QualityData</MessageType>
   <Sender>Data</Sender>
  <Recipient>Data1</Recipient>
  <PublishedDate>2013-12-22T13:15:23</PublishedDate>
 </Header>
<Body>
 <ID>150105</ID>
 <Data>
   <Count>5</Count>
   <Brix>110</Brix>
   <CO2>110</CO2>
  </QualityData>
</Body>
</Message>'
select @val= REPLACE(@val,'<Message>','');
select @val= REPLACE(@val,'</Message>','');
SELECT @start= CHARINDEX('<Body>', @val);
SELECT @end=CHARINDEX('</Body>', @val);
select @len= LEN (@val)
SELECT @outval= SUBSTRING ( @val ,@start ,@end- @start  )
print @outval

答案 2 :(得分:0)

在您的陈述之后,我在代码中添加了以下行。我在我的案例中使用了SUBSTRING和CHARINDEX来解决这个问题,而且我得到了你正在寻找的东西。这是我的代码:SELECT SUBSTRING(@VAL, CHARINDEX('<Body>', @VAL), CHARINDEX('</QualityData>', @VAL) - CHARINDEX('<Body>', @VAL) + LEN('</QualityData>'))这对我来说很好。