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

Oracle में स्तंभों के लिए अल्पविराम से अलग किए गए मानों को विभाजित करें

खबरदार! '[^,]+' . प्रारूप की regexp_substr अभिव्यक्ति यदि सूची में कोई अशक्त तत्व है और आप उस वस्तु को या उसके बाद एक चाहते हैं तो अपेक्षित मान वापस नहीं करेगा। इस उदाहरण पर विचार करें जहां चौथा तत्व न्यूल है और मैं 5 वां तत्व चाहता हूं और इस प्रकार '5' को वापस करने की अपेक्षा करता हूं:

SQL> select regexp_substr('1,2,3,,5,6', '[^,]+', 1, 5) from dual;

R
-
6

हैरत में डालना! यह 5वां गैर-नल तत्व लौटाता है, वास्तविक 5वां तत्व नहीं! गलत डेटा लौटा और हो सकता है कि आप उसे पकड़ भी न पाएं। इसके बजाय इसे आजमाएं:

SQL> select regexp_substr('1,2,3,,5,6', '(.*?)(,|$)', 1, 5, NULL, 1) from dual;

R
-
5

तो, ऊपर सही किया गया REGEXP_SUBSTR 0 या अधिक अल्पविराम-सीमांकित वर्णों की 5 वीं घटना को देखने के लिए कहता है, जिसके बाद अल्पविराम या पंक्ति का अंत होता है (अगले विभाजक के लिए अनुमति देता है, चाहे वह अल्पविराम हो या पंक्ति का अंत) और जब पाया गया तो पहला उपसमूह लौटाएं (डेटा जिसमें अल्पविराम या पंक्ति का अंत शामिल नहीं है)।

खोज मिलान पैटर्न '(.*?)(,|$)' समझाया गया:

(             = Start a group
.             = match any character
*             = 0 or more matches of the preceding character
?             = Match 0 or 1 occurrences of the preceding pattern
)             = End the 1st group
(             = Start a new group (also used for logical OR)
,             = comma
|             = OR
$             = End of the line
)             = End the 2nd group

संपादित करें:अधिक जानकारी जोड़ी गई और रेगेक्स को सरल बनाया।

अधिक जानकारी के लिए यह पोस्ट देखें और आसान पुन:उपयोग के लिए एक फ़ंक्शन में इसे इनकैप्सुलेट करने के लिए एक सुझाव:REGEX एक सूची से nth मान का चयन करने के लिए, नल के लिए अनुमति देता हैयह वह पोस्ट है जहां मैंने प्रारूप की खोज की थी '[^,]+' कोड> समस्या है। दुर्भाग्य से यह रेगेक्स प्रारूप है जिसे आप आमतौर पर किसी सूची को पार्स करने के तरीके के बारे में प्रश्नों के उत्तर के रूप में देखेंगे। '[^,]+' . द्वारा लौटाए जा रहे सभी गलत डेटा के बारे में सोचकर मैं सिहर उठता हूं !



  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. मुझे PLS-00302 क्यों मिलता है:घटक मौजूद होने पर घोषित किया जाना चाहिए?

  3. एक और 12c अनुकूलक श्वेत पत्र

  4. ओरेकल में जेसन के साथ काम करें

  5. Oracle प्रपत्रों में PLAY_SOUND कैसे करें