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

Oracle में REGEXP_SUBSTR () फ़ंक्शन

Oracle में, REGEXP_SUBSTR() फ़ंक्शन नियमित अभिव्यक्ति पैटर्न के आधार पर एक स्ट्रिंग से एक सबस्ट्रिंग देता है।

यह SUBSTR() . की कार्यक्षमता का विस्तार करता है हमें नियमित अभिव्यक्ति पैटर्न का उपयोग करने की अनुमति देकर कार्य करते हैं।

सिंटैक्स

वाक्य रचना इस प्रकार है:

REGEXP_SUBSTR ( source_char, pattern
                [, position
                   [, occurrence
                      [, match_param
                         [, subexpr ]
                      ]
                   ]
                ]
              )

कहां:

  • source_char एक चरित्र अभिव्यक्ति है जो खोज मूल्य के रूप में कार्य करती है।
  • pattern नियमित अभिव्यक्ति है।
  • position एक धनात्मक पूर्णांक है जो निर्दिष्ट करता है कि खोज कहाँ से शुरू करनी है। डिफ़ॉल्ट 1 है , यानी, पहले अक्षर पर खोज शुरू करें।
  • occurrence एक गैर-ऋणात्मक पूर्णांक है जो निर्दिष्ट करता है कि किस घटना को खोजना है। डिफ़ॉल्ट 1 है , जिसका अर्थ है पहली घटना की खोज।
  • match_param आपको फ़ंक्शन के डिफ़ॉल्ट मिलान व्यवहार को बदलने देता है। उदाहरण के लिए, यह आपको केस-सेंसिटिविटी निर्दिष्ट करने की अनुमति देता है, कि कई लाइनों और रिक्त स्थान से कैसे निपटा जाता है, आदि। यह तर्क उसी तरह काम करता है जब REGEXP_COUNT() के साथ प्रयोग किया जाता है। समारोह। अधिक जानकारी के लिए उस फ़ंक्शन के लिए Oracle के दस्तावेज़ देखें।
  • एक pattern के लिए उप-अभिव्यक्तियों के साथ, subexpr 0 से 9 तक एक गैर-ऋणात्मक पूर्णांक है जो दर्शाता है कि pattern . में कौन-सा उप-अभिव्यक्ति है समारोह द्वारा वापस किया जाना है। यह तर्क उसी तरह काम करता है जब REGEXP_INSTR() . के साथ प्रयोग किया जाता है समारोह। उस फ़ंक्शन के लिए अधिक जानकारी के लिए Oracle के दस्तावेज़ देखें।

उदाहरण

यहां REGEXP_SUBSTR() using का उपयोग करने का एक बुनियादी उदाहरण दिया गया है ओरेकल में:

SELECT 
    REGEXP_SUBSTR('Cats and dogs', 'd.g')
FROM DUAL;

परिणाम:

dog

इस मामले में एक मैच होता है, और पहला (और इस मामले में, केवल) मिलान करने वाला सबस्ट्रिंग लौटाया जाता है।

नियमित अभिव्यक्ति बहुत शक्तिशाली हो सकती है, और यह उदाहरण एक बहुत ही सरल उदाहरण का उपयोग करता है। REGEXP_SUBSTR() use का उपयोग करने के लिए प्रभावी ढंग से, आपको वांछित परिणाम के लिए उपयोग करने के लिए सही पैटर्न जानने की आवश्यकता होगी।

कोई मिलान नहीं

यहां एक उदाहरण दिया गया है जहां कोई मेल नहीं है:

SET NULL 'null';
SELECT REGEXP_SUBSTR('My dogs like dregs', 't.g')
FROM DUAL;

परिणाम:

null

कोई मेल नहीं है, इसलिए null लौटा दिया गया है।

डिफ़ॉल्ट रूप से, SQLcl और SQL*Plus जब भी null . खाली स्थान लौटाते हैं SQL SELECT . के परिणामस्वरूप होता है बयान।

हालांकि, आप SET NULL . का उपयोग कर सकते हैं वापस करने के लिए एक अलग स्ट्रिंग निर्दिष्ट करने के लिए। यहाँ मैंने निर्दिष्ट किया है कि स्ट्रिंग null लौटाया जाना चाहिए।

एकाधिक मिलान

कई मिलानों वाला एक उदाहरण यहां दिया गया है:

SELECT 
    REGEXP_SUBSTR('My dogs have dags', 'd.g')
FROM DUAL;

परिणाम:

dog

हालांकि, यदि आवश्यक हो तो आप निर्दिष्ट कर सकते हैं कि किस घटना को बदलना है:

SELECT 
REGEXP_SUBSTR('My dogs have dags', 'd.g', 1, 2)
FROM DUAL;

परिणाम:

dag

ध्यान दें कि मैंने यहां दो तर्क जोड़े हैं; 1 और 2 . 1 खोज शुरू करने के लिए स्ट्रिंग में ठिकाना निर्दिष्ट करता है (इस मामले में, पहले वर्ण पर)। 2 यह निर्दिष्ट करता है कि किस घटना को खोजना है। इस मामले में, दूसरी घटना की खोज की जाती है।

अगर मैं पहली बार खोज शुरू करता हूं तो यहां क्या होता है:

SELECT 
REGEXP_SUBSTR('My dogs have dags', 'd.g', 8, 2)
FROM DUAL;

परिणाम:

null

इस मामले में कोई मेल नहीं है, क्योंकि शुरुआती स्थिति के बाद केवल एक और घटना होती है।

अगर मैं अंतिम तर्क को 1 . में बदल दूं , तो हमें एक मैच मिलता है (क्योंकि यह निर्दिष्ट प्रारंभिक स्थिति के बाद पहली घटना है):

SELECT 
REGEXP_SUBSTR('My dogs have dags', 'd.g', 8, 1)
FROM DUAL;

परिणाम:

dag

केस संवेदनशीलता

REGEXP_SUBSTR() फ़ंक्शन ओरेकल के संयोजन निर्धारण और व्युत्पत्ति नियमों का पालन करता है, जो पैटर्न के साथ स्ट्रिंग का मिलान करते समय उपयोग करने के लिए संयोजन को परिभाषित करता है।

हालांकि, आप वैकल्पिक पांचवें तर्क के साथ केस-संवेदनशीलता को स्पष्ट रूप से निर्दिष्ट कर सकते हैं। जब आप ऐसा करते हैं, तो यह निर्धारित संयोजन की किसी भी केस-संवेदनशीलता या उच्चारण-संवेदनशीलता को ओवरराइड करता है।

आप i . निर्दिष्ट कर सकते हैं केस-असंवेदनशील मिलान और c . के लिए केस-संवेदी मिलान के लिए।

यहां एक उदाहरण दिया गया है:

SELECT 
    REGEXP_SUBSTR('My Cats', 'c.t', 1, 1) AS "Default",
    REGEXP_SUBSTR('My Cats', 'c.t', 1, 1, 'i') AS "Case Insensitive",
    REGEXP_SUBSTR('My Cats', 'c.t', 1, 1, 'c') AS "Case Sensitive"
FROM DUAL;

परिणाम:

   Default    Case Insensitive    Case Sensitive 
__________ ___________________ _________________ 
null       Cat                 null             

इन परिणामों के आधार पर मेरा मिलान केस-संवेदी प्रतीत होता है। अन्य दो स्ट्रिंग्स को क्रमशः केस-असंवेदनशील और केस-संवेदी मिलान के लिए मजबूर किया गया था।

सबएक्सप्रेशन

विशिष्ट उप-अभिव्यक्ति पैटर्न को वापस करने के लिए छठे तर्क का उपयोग करने का एक उदाहरण यहां दिया गया है:

SELECT REGEXP_SUBSTR(
    'catdogcow', 
    '(c.t)(d.g)(c.w)', 
    1, 1, 'i', 1
    )
FROM DUAL;

परिणाम:

cat

इस मामले में मैंने पहली उप-अभिव्यक्ति लौटा दी।

अगर मैं तीसरी उप-अभिव्यक्ति निर्दिष्ट करता हूं तो यहां क्या होता है:

SELECT REGEXP_SUBSTR(
    'catdogcow', 
    '(c.t)(d.g)(c.w)', 
    1, 1, 'i', 3
    )
FROM DUAL;

परिणाम:

cow

अशक्त तर्क

यदि कोई तर्क null है , परिणाम null . है :

SET NULL 'null';
SELECT 
    REGEXP_SUBSTR(null, 'c.t', 1, 1, 'i', 1) AS "1",
    REGEXP_SUBSTR('Cat', null, 1, 1, 'i', 1) AS "2",
    REGEXP_SUBSTR('Cat', 'c.t', null, 1, 'i', 1) AS "3",
    REGEXP_SUBSTR('Cat', 'c.t', 1, null, 'i', 1) AS "4",
    REGEXP_SUBSTR('Cat', 'c.t', 1, 1, null, 1) AS "5",
    REGEXP_SUBSTR('Cat', 'c.t', 1, 1, 'i', null) AS "6"
FROM DUAL;

परिणाम:

      1       2       3       4       5       6 
_______ _______ _______ _______ _______ _______ 
null    null    null    null    null    null   

तर्कों की गलत संख्या

फ़ंक्शन के लिए कोई तर्क नहीं पारित करने, या बहुत कम, एक त्रुटि में परिणाम:

SELECT REGEXP_SUBSTR()
FROM DUAL;

परिणाम:

Error starting at line : 1 in command -
SELECT REGEXP_SUBSTR()
FROM DUAL
Error at Command Line : 1 Column : 8
Error report -
SQL Error: ORA-00938: not enough arguments for function
00938. 00000 -  "not enough arguments for function"
*Cause:    
*Action:

यही बात तब लागू होती है जब हम बहुत अधिक तर्क देते हैं:

DUAL से
SELECT REGEXP_SUBSTR('Cat', 'c.t', 1, 1, 'i', 1, 'oops')
FROM DUAL;

परिणाम:

Error starting at line : 1 in command -
SELECT REGEXP_SUBSTR('Cat', 'c.t', 1, 1, 'i', 1, 'oops')
FROM DUAL
Error at Command Line : 1 Column : 8
Error report -
SQL Error: ORA-00939: too many arguments for function
00939. 00000 -  "too many arguments for function"
*Cause:    
*Action:

अधिक जानकारी

REGEXP_SUBSTR() फ़ंक्शन (साथ ही साथ Oracle का रेगुलर एक्सप्रेशन का अन्य कार्यान्वयन) IEEE पोर्टेबल ऑपरेटिंग सिस्टम इंटरफ़ेस (POSIX) रेगुलर एक्सप्रेशन मानक और यूनिकोड कंसोर्टियम के यूनिकोड रेगुलर एक्सप्रेशन दिशानिर्देशों के अनुरूप है।

अधिक जानकारी और REGEXP_SUBSTR() . के उदाहरणों के लिए Oracle दस्तावेज़ देखें समारोह।


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. ईएफ 4, आंशिक कक्षाएं कैसे जोड़ें

  2. Oracle SQL डेवलपर से Excel में डेटा कैसे निर्यात करें?

  3. Oracle में डेटाटाइम प्रारूप तत्वों की सूची

  4. Oracle SQL डेवलपर का उपयोग करके एक इकाई-संबंध (ER) आरेख कैसे उत्पन्न करें

  5. Oracle के किसी अन्य उपयोगकर्ता को संग्रहीत कार्यविधि पर अधिकार प्रदान करना