Можно ли разобрать пары ключ: значение в SQL - PullRequest
1 голос
/ 13 марта 2019

У меня есть столбец базы данных (varchar), который содержит данные в следующем формате:

Action:DownloadDocuments|State:1|Site:250104|Ref:19014|Member:12345

Я знаю, что могу использовать STRING_SPLIT, чтобы получить пары key:value, но я 'Я пытаюсь получить таблицу ключей и значений.Я пробовал UNIONS расщепления, но пока просто получаю ошибки


Я пробовал

        ;WITH cte_pairs AS
(
SELECT value
FROM STRING_SPLIT(@activityValue, '|')
)
, cte_keyvalues AS
(SELECT value
FROM STRING_SPLIT(cte_pairs.value,':')
)
SELECT * FROM cte_keyvalues

1 Ответ

5 голосов
/ 13 марта 2019

Да, это довольно просто

SELECT [key] = LEFT(s.value, ca.pos - 1),
       [value] = SUBSTRING(s.value, ca.pos + 1, 8000)
FROM STRING_SPLIT(@activityValue, '|') s
CROSS APPLY (VALUES(CHARINDEX(':', s.value))) ca(pos);
...