connected by
. का "दुर्व्यवहार" (जैसा कि कॉलिन 'टी हार्ट ने कहा) यहाँ एक अच्छा उद्देश्य है:REGEXP_SUBSTR
. का उपयोग करके आप 4 मैचों (23,34,45,56) में से केवल एक को निकाल सकते हैं:रेगेक्स [^,]+
स्ट्रिंग में किसी भी वर्ण अनुक्रम से मेल खाता है जिसमें अल्पविराम नहीं होता है।
अगर आप दौड़ने की कोशिश करेंगे:
SELECT REGEXP_SUBSTR ('23,34,45,56','[^,]+') as "token"
FROM DUAL
आपको मिलेगा 23
।
और अगर आप दौड़ने की कोशिश करेंगे:
SELECT REGEXP_SUBSTR ('23,34,45,56','[^,]+',1,1) as "token"
FROM DUAL
आपको 23
भी मिलेगा केवल इतना ही कि अब हम दो अतिरिक्त पैरामीटर . भी सेट करते हैं :स्थिति 1 में देखना शुरू करें (जो कि डिफ़ॉल्ट है), और पहली घटना को वापस करें।
अब चलते हैं:
SELECT REGEXP_SUBSTR ('23,34,45,56','[^,]+',1,2) as "token"
FROM DUAL
इस बार हमें मिलेगा 34
(दूसरी घटना) और 3
. का उपयोग करना चूंकि अंतिम पैरामीटर 45
लौटाएगा और इसी तरह।
पुनरावर्ती का उपयोग connected by
level
. के साथ सुनिश्चित करता है कि आपको सभी प्रासंगिक परिणाम प्राप्त होंगे (जरूरी नहीं कि मूल क्रम में ही!):
SELECT DISTINCT REGEXP_SUBSTR ('23,34,45,56','[^,]+',1,LEVEL) as "token"
FROM DUAL
CONNECT BY REGEXP_SUBSTR ('23,34,45,56','[^,]+',1,LEVEL) IS NOT NULL
order by 1
वापस आ जाएगा:
TOKEN
23
34
45
56
जिसमें न केवल सभी 4 परिणाम होते हैं, बल्कि परिणामसेट में इसे अलग-अलग पंक्तियों में विभाजित भी करते हैं!
अगर आप बेवकूफ करेंगे इसके साथ - यह आपको विषय के बारे में एक स्पष्ट दृष्टिकोण दे सकता है।