0

varchar在表中有一个列,其中包含一串类似 XML 的数据。我说“类似 XML”是因为字符串通常在我得到所有字符串之前就被截断了。我需要从字符串中拉出<TransactionID>and<EncID>部分。

这是我需要解析的字符串开头的示例:

<Message>    <TransactionID>1679098</TransactionID>    <EncID>172</EncID>    
    <EncGuid>6028afdc-bc5c-4d3c-b39f-6709ab6ae4d2</EncGuid>

我试过substring()了,但我不能总是正确识别端点。我认为应该有一个简单的方法,因为我知道我所追求的数据周围的开始和结束标签。有没有人有什么建议?

4

1 回答 1

0

我创建了一个用户定义的函数,当我需要这样做时,它使用简单的字符串操作:

CREATE FUNCTION [dbo].[GetBetween]
(
    @Xml    VarChar( MAX ),
    @Start  VarChar( 100 ),
    @End    VarChar( 100 )
)    
RETURNS VARCHAR( 1000 )
AS  
BEGIN 

DECLARE @I INT, @J INT

SET @I = CHARINDEX( @Start, @Xml )
SET @J = CHARINDEX( @End, @Xml, @I + LEN( @Start ) )

IF @I > 0 AND @J > @I
BEGIN
    SET @I = @I + LEN( @Start )
    RETURN SUBSTRING( @Xml, @I, @J - @I )
END

RETURN NULL

END

以下是您如何将其用于您的案例:

SELECT
    dbo.GetBetween(Data, '<TransactionID>', '</TransactionID>') AS TransactionID,
    dbo.GetBetween(Data, '<EncID>', '</EncID>') AS EncID
FROM Your_Table

请注意,这不处理转义字符。如果您的 XML 包含&amp;它将作为&amp;.

于 2013-08-13T19:52:19.750 回答