Возможно ли проанализировать пары ключ: значение в SQL

#sql-server #split

#sql-сервер #разделить

Вопрос:

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

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

Я знаю, что могу использовать STRING_SPLIT для получения пар key:value но я пытаюсь получить таблицу ключей и значений. Я пробовал ОБЪЕДИНЕНИЯ разделений, но пока получаю только ошибки


Я пытался

         ;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:

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

 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);
  

Комментарии:

1. Откуда взялись 8000?

2. @Nick — просто большое число, которое, надеюсь, больше любого value , которое может существовать на практике. Чтобы он считывался до конца строки без необходимости что-либо делать с LEN для вычисления точного количества символов