0

I have following Table

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]')

I am trying to extract data as followed

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
4

2 回答 2

2

查看函数 SUBSTRING 和 CHARINDEX。将它们一起使用,您应该能够提取它。

SUBSTRING(表达式,开始,长度)

CHARINDEX ( expressionToFind ,expressionToSearch [ , start_location ] )

例如:

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

将为您提供 EXCEPTION_CODE 列。

于 2016-07-20T20:39:32.637 回答
1

XML 提供了更多的灵活性charindexreplace对于准备格式良好的 xml 非常有用。见代码。

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

并且结果与 OP 中的结果一样。

于 2016-07-20T20:54:59.747 回答