0

XMLにvarchar似たデータの文字列を含むテーブルに列があります。「XML に似ている」と言うのは、通常、文字列はすべて取得する前に切り捨てられるからです。<TransactionID>文字列からセクションとセクションを引き出す必要があり<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 に答える