我有一个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获取此格式的任何建议。
答案 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>'))
这对我来说很好。