Oracle
 sql >> डेटाबेस >  >> RDS >> Oracle

REGEX सूची से nth मान का चयन करने के लिए, नल के लिए अनुमति देता है

जवाब देने वालों को धन्यवाद। दिए गए लिंक में आपके उत्तरों और उत्तरों को पढ़ने के बाद, मैं इस समाधान पर पहुंचा:

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;


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. हाइबरनेट एक ही तालिका में दो बार शामिल होने के लिए मानदंड बनाएं - 2 अंतर त्रुटि के साथ 2 दृष्टिकोण की कोशिश की

  2. नकली OLAP

  3. Oracle:OALL8 असंगत स्थिति में है

  4. current_timestamp SQL (Oracle) में 10 सेकंड कैसे जोड़ें

  5. Oracle पिवट क्वेरी कॉलम नामों के आसपास उद्धरणों के साथ कॉलम देती है। क्या?