【问题标题】:Sql Server Extract StringSql Server 提取字符串
【发布时间】:2016-11-24 05:15:09
【问题描述】:
我有以下表格
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
【问题讨论】:
标签:
sql-server
replace
substring
charindex
【解决方案1】:
XML 比charindex 更灵活。 replace 对于准备格式良好的 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 列。