Jika Anda memerlukan solusi ad-hoc cepat untuk kasus umum dengan kode minimum, CTE dua baris rekursif ini akan melakukannya:
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
Gunakan ini sebagai pernyataan yang berdiri sendiri atau cukup tambahkan CTE di atas ke salah satu kueri Anda dan Anda akan dapat menggabungkan tabel yang dihasilkan bdengan yang lain untuk digunakan dalam ekspresi lebih lanjut.
edit (oleh Shnugo)
Jika Anda menambahkan penghitung, Anda akan mendapatkan indeks posisi bersama dengan Daftar:
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;
Hasil:
n s
1 1
2 2333
3 344
4 4