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

Oracle REGEXP_SUBSTR से SUBSTR + INSTR

आपका कोड काम नहीं करता है, क्योंकि DUAL तालिका में कोई code नहीं है कॉलम; हालांकि, अगर हम मानते हैं कि आप एक अलग तालिका का उपयोग कर रहे हैं जिसमें वह कॉलम है:

CREATE TABLE table_name ( code ) AS
SELECT '[1],[22],[333],[4444],[55555],[666666],[7777777],[88888888],[999999999],[0000000000]' FROM DUAL

फिर आप एक पुनरावर्ती उप-क्वेरी फैक्टरिंग क्लॉज का उपयोग कर सकते हैं:

WITH rsqfc ( code, start_pos, end_pos ) AS (
  SELECT code,
         1,
         INSTR( code, ',', 1 )
  FROM   table_name
UNION ALL
  SELECT code,
         end_pos + 1,
         INSTR( code, ',', end_pos + 1 )
  FROM   rsqfc
  WHERE  end_pos > 0
)
SELECT DISTINCT
       REPLACE(
         CASE end_pos
         WHEN 0
         THEN SUBSTR( code, start_pos + 1, 8 )
         ELSE SUBSTR( code, start_pos + 1, LEAST( end_pos - start_pos - 1, 8 ) )
         END,
         ']'
       ) AS code
FROM   rsqfc;

कौन सा आउटपुट:

db<>fiddle यहां




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. 'MSDAORA.1' प्रदाता स्थानीय मशीन पर पंजीकृत नहीं है

  2. निर्देशिका में फाइलों की सूची खोजने में समस्या

  3. संग्रहीत प्रक्रिया में पैरामीटर के रूप में तालिका नाम कैसे पास करें?

  4. पीएल/एसक्यूएल कोड ब्लॉक को रिकर्सिव कैसे करें जो कई चुनिंदा वाक्यों के साथ काम करता है?

  5. कस्टम आलसी-मूल्यांकन/फ़ंक्शन पैरामीटर के शॉर्ट-सर्किटिंग के लिए एक वाक्यविन्यास