जवाब देने वालों को धन्यवाद। दिए गए लिंक में आपके उत्तरों और उत्तरों को पढ़ने के बाद, मैं इस समाधान पर पहुंचा:
SQL> select REGEXP_SUBSTR('1,,3,4,5', '(.*?)(,|$)', 1, 2, NULL, 1) data
2 from dual;
Data
----
जिसे "शून्य या अधिक वर्णों के वैकल्पिक सेट की दूसरी घटना को देखने के रूप में वर्णित किया जा सकता है, जिसके बाद अल्पविराम या पंक्ति का अंत होता है, और पहला उपसमूह लौटाता है (जो डेटा अल्पविराम या अंत से कम होता है) लाइन)।
मैं यह उल्लेख करना भूल गया कि मैंने विभिन्न पदों पर अशक्त के साथ परीक्षण किया, कई नल, विभिन्न पदों का चयन, आदि।
एकमात्र चेतावनी जो मुझे मिल सकती है वह यह है कि यदि आप जिस क्षेत्र की तलाश कर रहे हैं, वह उपलब्ध संख्या से अधिक है, तो यह सिर्फ NULL लौटाता है, इसलिए आपको इसके बारे में पता होना चाहिए। मेरे मामले में कोई समस्या नहीं है।
संपादित करें:मैं भविष्य के खोजकर्ताओं के लाभ के लिए स्वीकृत उत्तर अपडेट कर रहा हूं जो इस पर ठोकर खा सकते हैं।
अगला कदम कोड को इनकैप्सुलेट करना है ताकि इसे एक सरल, पुन:प्रयोज्य फ़ंक्शन में बनाया जा सके। यहाँ फ़ंक्शन स्रोत है:
FUNCTION GET_LIST_ELEMENT(string_in VARCHAR2, element_in NUMBER, delimiter_in VARCHAR2 DEFAULT ',') RETURN VARCHAR2 IS
BEGIN
RETURN REGEXP_SUBSTR(string_in, '(.*?)(\'||delimiter_in||'|$)', 1, element_in, NULL, 1);
END GET_LIST_ELEMENT;
यह डेवलपर्स से रेगेक्स जटिलताओं को छुपाता है जो इसके साथ इतने सहज नहीं हो सकते हैं और उपयोग में होने पर कोड को क्लीनर बनाते हैं। चौथा तत्व पाने के लिए इसे इस तरह से कॉल करें:
select get_list_element('123,222,,432,555', 4) from dual;