Если вы действительно хотите сделать это в одном запросе, то вы можете использовать следующий КТР подход, но он сильно жёстко, вы можете улучшить его для динамического использования:
DECLARE @List NVARCHAR(MAX) = N'Attribute "Request Type" value: Prior; Attribute "Job Type" value: New; Attribute "Proof Number" value: 1; Attribute "Vision Number" value: 534290;'
DECLARE @Delimiter NVARCHAR(255) = N';'
DECLARE @ll INT = LEN(@List) + 1, @ld INT = LEN(@Delimiter);
WITH a AS
(
SELECT
[start] = 1,
[end] = COALESCE(NULLIF(CHARINDEX(@Delimiter,
@List, 1), 0), @ll),
[value] = LTRIM(RTRIM(REPLACE(
SUBSTRING(@List, 1,
COALESCE(NULLIF(CHARINDEX(@Delimiter,
@List, 1), 0), @ll) - 1)
, 'Attribute', '')))
UNION ALL
SELECT
[start] = CONVERT(INT, [end]) + @ld,
[end] = COALESCE(NULLIF(CHARINDEX(@Delimiter,
@List, [end] + @ld), 0), @ll),
[value] = LTRIM(RTRIM(REPLACE(
SUBSTRING(@List, [end] + @ld,
COALESCE(NULLIF(CHARINDEX(@Delimiter,
@List, [end] + @ld), 0), @ll)-[end][email protected])
, 'Attribute', '')))
FROM a
WHERE [end] < @ll
)
SELECT LTRIM(RTRIM(REPLACE(REPLACE(
REPLACE([value],'"Job Type"', '')
, 'value', ''),':','')
))
FROM a
WHERE LEN([value]) > 0 AND [value] LIKE '%Job Type%'
OPTION (MAXRECURSION 0);
Но я должен призвать вас использовать UDF для преобразования вашей строки в таблицу, а затем для ее использования. Оригинальная идея взята с Common Table Expression
Посмотрите на '' SUBSTRING' и функций CHARINDEX'.Вы можете использовать первое, чтобы разделить строку на определенную позицию символа, а второе - на поиск строки для ключевого слова. – Dan