Wenn Sie eine schnelle Ad-hoc-Lösung für häufige Fälle mit minimalem Code benötigen, ist dieser rekursive CTE-Zweiliner genau das Richtige für Sie:
DECLARE @s VARCHAR(200) = ',1,2,,3,,,4,,,,5,'
;WITH
a AS (SELECT i=-1, j=0 UNION ALL SELECT j, CHARINDEX(',', @s, j + 1) FROM a WHERE j > i),
b AS (SELECT SUBSTRING(@s, i+1, IIF(j>0, j, LEN(@s)+1)-i-1) s FROM a WHERE i >= 0)
SELECT * FROM b
Verwenden Sie dies entweder als eigenständige Anweisung oder fügen Sie einfach die oben genannten CTEs zu einer Ihrer Abfragen hinzu, und Sie können die resultierende Tabelle b
mit anderen verknüpfen, um sie in weiteren Ausdrücken zu verwenden.
bearbeiten (von Shnugo)
Wenn Sie einen Zähler hinzufügen, erhalten Sie zusammen mit der Liste einen Positionsindex:
DECLARE @s VARCHAR(200) = '1,2333,344,4'
;WITH
a AS (SELECT n=0, i=-1, j=0 UNION ALL SELECT n+1, j, CHARINDEX(',', @s, j+1) FROM a WHERE j > i),
b AS (SELECT n, SUBSTRING(@s, i+1, IIF(j>0, j, LEN(@s)+1)-i-1) s FROM a WHERE i >= 0)
SELECT * FROM b;
Das Ergebnis:
n s
1 1
2 2333
3 344
4 4