Sql 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]')
Я пытаюсь извлечь данные следующим образом
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
2 ответа
Решение
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)
И результаты в соответствии с пожеланиями в ОП.
Посмотрите на функции 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.