2016-07-20 50 views
0

我有如下表Sql Server中提取字符串

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

我想爲隨後

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 

回答

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所期望的那樣。

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柱。