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

Oracle में स्ट्रिंग को कई पंक्तियों में विभाजित करना

यह एक बेहतर तरीका हो सकता है (रेगेक्सपी के साथ भी और इसके द्वारा कनेक्ट करें):

with temp as
(
    select 108 Name, 'test' Project, 'Err1, Err2, Err3' Error  from dual
    union all
    select 109, 'test2', 'Err1' from dual
)
select distinct
  t.name, t.project,
  trim(regexp_substr(t.error, '[^,]+', 1, levels.column_value))  as error
from 
  temp t,
  table(cast(multiset(select level from dual connect by  level <= length (regexp_replace(t.error, '[^,]+'))  + 1) as sys.OdciNumberList)) levels
order by name

संपादित करें :यहाँ एक सरल (जैसे, "गहराई से नहीं") क्वेरी की व्याख्या है।

  1. length (regexp_replace(t.error, '[^,]+')) + 1 regexp_replace का उपयोग करता है कुछ भी मिटाने के लिए जो सीमांकक नहीं है (इस मामले में अल्पविराम) और length +1 कितने तत्व (त्रुटियां) प्राप्त करने के लिए।
  2. select level from dual connect by level <= (...) पदानुक्रमित क्वेरी . का उपयोग करता है 1 से त्रुटियों की कुल संख्या तक, मिलानों की बढ़ती संख्या के साथ एक स्तंभ बनाने के लिए।

    पूर्वावलोकन:

    select level, length (regexp_replace('Err1, Err2, Err3', '[^,]+'))  + 1 as max 
    from dual connect by level <= length (regexp_replace('Err1, Err2, Err3', '[^,]+'))  + 1
    
  3. table(cast(multiset(.....) as sys.OdciNumberList)) ऑरैकल प्रकारों की कुछ कास्टिंग करता है।
    • cast(multiset(.....)) as sys.OdciNumberList के रूप में कई संग्रह (मूल डेटा सेट में प्रत्येक पंक्ति के लिए एक संग्रह) को संख्याओं के एकल संग्रह, OdciNumberList में बदल देता है।
    • table() फ़ंक्शन एक संग्रह को एक परिणामसेट में बदल देता है।
  4. FROM शामिल हुए बिना क्रॉस जॉइन . बनाता है आपके डेटासेट और मल्टीसेट के बीच। परिणामस्वरूप, 4 मैचों के साथ डेटा सेट में एक पंक्ति 4 बार दोहराई जाएगी ("column_value" नामक कॉलम में बढ़ती संख्या के साथ)।

    पूर्वावलोकन:

    select * from 
    temp t,
    table(cast(multiset(select level from dual connect by  level <= length (regexp_replace(t.error, '[^,]+'))  + 1) as sys.OdciNumberList)) levels
    
  5. trim(regexp_substr(t.error, '[^,]+', 1, levels.column_value)) column_value . का उपयोग करता है nth_appearance/ocurrence . के रूप में regexp_substr . के लिए पैरामीटर ।
  6. आप अपने डेटा सेट से कुछ अन्य कॉलम जोड़ सकते हैं (t.name, t.project एक उदाहरण के रूप में) आसान विज़ुअलाइज़ेशन के लिए।

Oracle डॉक्स के कुछ संदर्भ:

  • REGEXP_REPLACE
  • REGEXP_SUBSTR
  • एक्स्टेंसिबिलिटी स्थिरांक, प्रकार, और मैपिंग (OdciNumberList)
  • कास्ट (मल्टीसेट)
  • पदानुक्रमित प्रश्न


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. NUMTOYMINTERVAL () Oracle में फ़ंक्शन

  2. ओले-डीबी के लिए ऑरैकल प्रदाता के संस्करण की जांच कैसे करें। oraOLEDB.Oracle प्रदाता

  3. Oracle में Rows को Column में कैसे बदलें?

  4. ओरेकल के प्लस (+) नोटेशन और एएनएसआई जॉइन नोटेशन के बीच अंतर?

  5. Oracle jdbc ड्राइवर वर्गों के बीच अंतर?