2013-08-13 1 views
0

У меня есть столбец varchar в таблице, который содержит строку XML-подобных данных. Я говорю «XML-like», потому что строка обычно усекается, прежде чем я получу все это. Мне нужно вытащить секции <TransactionID> и <EncID> из строки.Нужна помощь, разделяющая поле с XML-подобными данными в SQL Server 2008

Вот пример начала строки, мне нужно разобрать:

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

Я попытался substring(), но я не всегда могу определить конечные точки правильно. Я думаю, что должен быть простой способ, так как я знаю начало и конец тегов вокруг данных, которые мне нужны. У кого-нибудь есть предложения?

ответ

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;.

Смежные вопросы