2016-07-20 14 views
0

I Tabelle folgende habenSQL Server Extract String

DECLARE @TABLE TABLE (COL NVARCHAR(MAX)) 
insert @TABLE values 
('[E=110][D=1]'), 
('[E=110][D=NE]'), 
('[E=110][D=U$]'), 
('[E=110][D=FX]') 

Ich versuche, Daten zu extrahieren als

COL   || EXCEPTION_CODE || DATA 
========================================= 
[E=110][D=1] ||  110   || 1 
[E=110][D=NE] ||  110   || NE 
[E=110][D=U$] ||  110   || U$ 
[E=110][D=FX] ||  110   || FX 

Antwort

1

XML gibt mehr Flexibilität als charindex. replace ist sehr nützlich, um wohlgeformte XML-Dateien zu erstellen. Siehe Code.

;with dat(col, x) as (
select col, cast('<col'+replace(
         replace(
          replace(col,'=','="'), 
         ']','" '), 
         '[',' ')+' />' as xml) 
from @TABLE 
) 
select col, t.v.value('@E','int') Exception_code, t.v.value('@D','varchar(100)') [DATA] 
from dat cross apply x.nodes('col') t(v) 

Und Ergebnisse sind wie in OP gewünscht.

2

Blick auf die Funktionen SUBSTRING und CHARINDEX gefolgt. Mit diesen zusammen sollten Sie in der Lage sein, dies zu extrahieren.

SUBSTRING (Ausdruck, Start, Länge)

CHARINDEX (expressionToFind, expressionToSearch [, start_location])

Zum Beispiel:

SELECT SUBSTRING(COL,CHARINDEX('E=',COL)+2,CHARINDEX(']',COL) - CHARINDEX('E=',COL) - 2) 
FROM @TABLE 

erhalten Sie die EXCEPTION_CODE Spalte erhalten.