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

Oracle में regexp_replace से कैसे बचें?

यह काम करना चाहिए बशर्ते आपके पास %ABC#%ABC# जैसा दिखने वाला इनपुट न हो

SELECT REGEXP_REPLACE( '%ABC#abc\%ABC#', '((^|[^\])(\\\\)*)%ABC#', '\1XXX' )
FROM DUAL;

यह या तो मेल खाएगा:

  • स्ट्रिंग की शुरुआत ^ या एक गैर-स्लैश वर्ण [^\] उसके बाद स्लैश वर्णों के जोड़े की संख्या, अंत में, वर्ण %ABC# . यह %ABC# . से मेल खाएगा , \\%ABC# , \\\\%ABC# और इसी तरह, लेकिन \%ABC# से मेल नहीं खाएगा , \\\%ABC# , \\\\\%ABC# जहां % . से बचने के लिए एक स्लैश है चरित्र।

प्रतिस्थापन में पहला कैप्चर समूह शामिल है क्योंकि अभिव्यक्ति पिछले गैर-स्लैश वर्ण और स्लैश के जोड़े से मेल खा सकती है और इन्हें आउटपुट में संरक्षित करने की आवश्यकता है।

अपडेट करें

यह थोड़ा जटिल हो जाता है लेकिन यह बार-बार मिलान करेगा:

WITH Data ( VALUE ) AS (
  SELECT '%ABC#%ABC#' FROM DUAL
)
SELECT ( SELECT LISTAGG(
                  REGEXP_REPLACE( COLUMN_VALUE, '((^|[^\])(\\\\)*)%ABC#$', '\1XXX' ),
                  NULL
                ) WITHIN GROUP ( ORDER BY NULL )
         FROM   TABLE(
                  CAST(
                    MULTISET(
                      SELECT  REGEXP_SUBSTR( d.value, '.*?(%ABC#|$)', 1, LEVEL )
                      FROM    DUAL
                      CONNECT BY LEVEL < REGEXP_COUNT( d.value, '.*?(%ABC#|$)' )
                    AS SYS.ODCIVARCHAR2LIST
                  )
                )
       ) AS Value
FROM   Data d;

यह स्ट्रिंग को उप-स्ट्रिंग में विभाजित करने के लिए एक सहसंबद्ध उप-क्वेरी का उपयोग करता है जो %ABC# के साथ समाप्त होता है या एंड-ऑफ-स्ट्रिंग (यह TABLE( CAST( MULTISET( ) .. ) ) के अंदर थोड़ा सा है ) और फिर प्रत्येक उप-स्ट्रिंग के अंत में प्रतिस्थापन करने के बाद इन उप-स्ट्रिंग को पुन:संयोजित करता है।



  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 में तालिका पंक्ति के लिए बनाया गया दिनांक-समय क्या है?

  2. चयन के अंदर ओरेकल कॉल संग्रहीत प्रक्रिया

  3. Java.lang.ClassNotFoundException को कैसे हल करें:oracle.jdbc.driver.OracleDriver रनटाइम पर?

  4. विजुअल C# 2008 . में tnsnames.ora को पार्स करना

  5. TO_CHAR किसी संख्या के आरंभ में स्थान (एक सफ़ेद वर्ण) क्यों जोड़ रहा है?