У меня есть строка «1,2,3,4,5,6», я хочу, чтобы результат в массиве как:разделенные запятой строку, используя КТР
1
2
3
4
5
Я попытался его с помощью функции, а также сделанные путем преобразования в xml.
У меня есть запрос:
with cte1 (str1,str2) AS
(
SELECT SUBSTRING('1,2,3,4,5,6,',1,1) X,
SUBSTRING('1,2,3,4,5,6,',CHARINDEX(',','1,2,3,4,5,6,,') +1,LEN('1,2,3,4,5,6,')-2) Y
UNION all
SELECT SUBSTRING(str2,1,1) X ,SUBSTRING(str2,CHARINDEX(',',str2)+1,LEN(str2)-2) Y
FROM CTE1
WHERE SUBSTRING(str2,CHARINDEX(',',str2)+0,1) <> ' ')
SELECT str1 FROM CTE1;
, который дает результат, как и ожидалось. но если я меняюсь строку она дает случайные reults как:
with cte1 (str1,str2) AS
(
SELECT SUBSTRING('24,78,45,56,',1,1) X,
SUBSTRING('24,78,45,56,',CHARINDEX(',','24,78,45,56,') +1,LEN('24,78,45,56,')-2) Y
UNION all
SELECT SUBSTRING(str2,1,1) X ,SUBSTRING(str2,CHARINDEX(',',str2)+1,LEN(str2)-2) Y
FROM CTE1
WHERE SUBSTRING(str2,CHARINDEX(',',str2)+0,1) <> ' ')
SELECT str1 FROM CTE1;
результат:
2
7
4
5
[Аарон Бертрана к спасению ...] (http://sqlperformance.com/2012/07/t-sql-queries/split-strings) –
В идеале, не надо. Не начинайте с «строки, разделенной запятыми», поскольку на самом деле это не вещь *, разработанная * для хранения нескольких значений. Начните с параметра table-valued или переменной xml или переменной таблицы и т. Д. Что-то * спроектировано * для хранения нескольких значений. –