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

Oracle रेगुलर एक्सप्रेशन स्प्लिट स्ट्रिंग अंतिम अवसर से

आप इसे अलग-अलग कैप्चर समूहों को निकालकर डबल रिवर्स के बिना कर सकते हैं (चारों ओर () कोष्ठक):

WITH t ( VAL ) AS (
  SELECT 'my_new_table_2015_06_31' FROM DUAL UNION ALL
  SELECT 'my_new_table_temp_2016_06_31' FROM DUAL
)
SELECT REGEXP_SUBSTR( val, '^(.*)_([^_]+)_([^_]+)_([^_]+)$', 1, 1, NULL, 1 ) AS COL4,
       REGEXP_SUBSTR( val, '^(.*)_([^_]+)_([^_]+)_([^_]+)$', 1, 1, NULL, 2 ) AS COL3,
       REGEXP_SUBSTR( val, '^(.*)_([^_]+)_([^_]+)_([^_]+)$', 1, 1, NULL, 3 ) AS COL2,
       REGEXP_SUBSTR( val, '^(.*)_([^_]+)_([^_]+)_([^_]+)$', 1, 1, NULL, 4 ) AS COL1
FROM   t

आप रेगुलर एक्सप्रेशन को केवल उपयोग करके और भी सरल बना सकते हैं:

'^(.+)_(.+)_(.+)_(.+)$'

पहला .+ लालची है इसलिए यह जितना संभव हो उतना मेल खाएगा जब तक कि दूसरे - चौथे कैप्चरिंग समूहों पर न्यूनतम मैचों के लिए केवल पर्याप्त स्ट्रिंग शेष न हो।

हालांकि, आपको रेगुलर एक्सप्रेशन की आवश्यकता नहीं है :

WITH t ( VAL ) AS (
  SELECT 'my_new_table_2015_06_31' FROM DUAL UNION ALL
  SELECT 'my_new_table_temp_2016_06_31' FROM DUAL
)
SELECT SUBSTR( val, 1,        pos1 - 1        ) AS col4,
       SUBSTR( val, pos1 + 1, pos2 - pos1 - 1 ) AS col3,
       SUBSTR( val, pos2 + 1, pos3 - pos2 - 1 ) AS col2,
       SUBSTR( val, pos3 + 1                  ) AS col1
FROM   (
  SELECT val,
         INSTR( val, '_', -1, 1 ) AS pos3,
         INSTR( val, '_', -1, 2 ) AS pos2,
         INSTR( val, '_', -1, 3 ) AS pos1
  FROM   t
);


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Oracle DBMS_LOB.INSTR और CONTAINS प्रदर्शन

  2. Oracle current_timestamp से सेकंड रूपांतरण

  3. विंडोज़ पर पीएचपी पीडीओ स्थापना (xampp)

  4. Oracle पर धीमी गति से चलने वाली SELECT क्वेरी को ऑप्टिमाइज़ करना जो SQL सर्वर पर तेज़ी से चलती है

  5. Oracle - sql डेवलपर से स्क्रिप्ट कैसे उत्पन्न करें