यदि आपको न्यूनतम कोड वाले सामान्य मामलों के लिए त्वरित तदर्थ समाधान की आवश्यकता है, तो यह पुनरावर्ती CTE टू-लाइनर करेगा:
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
या तो इसे एक स्टैंड-अलोन स्टेटमेंट के रूप में उपयोग करें या बस अपने किसी भी प्रश्न के लिए उपरोक्त CTEs जोड़ें और आप b
किसी भी अन्य अभिव्यक्तियों में उपयोग के लिए दूसरों के साथ परिणामी तालिका में शामिल होने में सक्षम होंगे ।
संपादित करें (Shnugo द्वारा)
यदि आप एक काउंटर जोड़ते हैं, तो आपको सूची के साथ एक स्थिति सूचकांक मिलेगा:
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;
परिणाम:
n s
1 1
2 2333
3 344
4 4