#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
для вычисления точного количества символов