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

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

Oracle में, INSTR() फ़ंक्शन किसी दिए गए स्ट्रिंग में एक सबस्ट्रिंग की खोज करता है, और इस सबस्ट्रिंग के पहले वर्ण की स्थिति को इंगित करने वाला एक पूर्णांक देता है। यदि विकल्प नहीं मिलता है, तो फ़ंक्शन 0 लौटाता है ।

INSTR() कम से कम दो तर्कों की आवश्यकता है; स्ट्रिंग, और सबस्ट्रिंग। यह एक वैकल्पिक तीसरे और चौथे तर्क को भी स्वीकार करता है जो आपको खोज के लिए आरंभिक स्थिति निर्दिष्ट करने की अनुमति देता है, और किस घटना को खोजना है।

INSTR() कार्यों के समूह के रूप में भी सोचा जा सकता है। पाँच अलग-अलग कार्य हैं; INSTR() , INSTRB() , INSTRC() , INSTR2() , और INSTR4() . प्रत्येक फ़ंक्शन लंबाई की गणना अलग तरीके से करता है।

सिंटैक्स

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

{ INSTR
| INSTRB
| INSTRC
| INSTR2
| INSTR4
}
(string , substring [, position [, occurrence ] ])

जहां string खोजने के लिए स्ट्रिंग है, substring खोजने के लिए सबस्ट्रिंग है, position सबस्ट्रिंग की प्रारंभिक स्थिति है, और occurrence खोजने के लिए कौन सी घटना है।

फ़ंक्शन लंबाई की गणना इस प्रकार करते हैं:

कार्य उपयोग करके लंबाई की गणना करता है…
INSTR() इनपुट वर्ण सेट द्वारा परिभाषित वर्ण, स्ट्रिंग के पहले वर्ण के साथ स्थिति 1 है।
INSTRB() बाइट्स
INSTRC() यूनिकोड पूर्ण वर्ण
INSTR2() UCS2 कोड अंक
INSTR4() UCS4 कोड अंक

उदाहरण

यहां एक बुनियादी उदाहरण दिया गया है:

SELECT INSTR('Big fat cat', 'fat')
FROM DUAL;

परिणाम:

5

की तुलना में INSTRB()

यह उदाहरण दिखाता है कि आप किस विशिष्ट फ़ंक्शन का उपयोग कर रहे हैं, और इसमें शामिल वर्ण सेट के आधार पर परिणाम कैसे भिन्न हो सकते हैं।

इस मामले में, हम तुलना करते हैं INSTR() INSTRB() . के साथ :

SELECT 
    INSTR('Böyük yağlı pişik', 'yağlı') AS INSTR,
    INSTRB('Böyük yağlı pişik', 'yağlı') AS INSTRB
FROM DUAL;

परिणाम:

   INSTR    INSTRB 
________ _________ 
       7         9

हम देख सकते हैं कि दो कार्यों ने दो अलग-अलग परिणाम दिए। ऐसा इसलिए है क्योंकि इस स्ट्रिंग में कुछ वर्ण दो बाइट्स का उपयोग करते हैं।

INSTR() फ़ंक्शन इनपुट कैरेक्टर सेट द्वारा परिभाषित स्थिति को लौटाता है, जबकि INSTRB() फ़ंक्शन बाइट्स . के आधार पर स्थिति लौटाता है ।

यदि हम मूल स्ट्रिंग पर लौटते हैं, तो परिणाम दो कार्यों के बीच समान होते हैं:

SELECT 
    INSTR('Big fat cat', 'fat') AS INSTR,
    INSTRB('Big fat cat', 'fat') AS INSTRB
FROM DUAL;

परिणाम:

   INSTR    INSTRB 
________ _________ 
       5         5 

ऐसा इसलिए है क्योंकि यह स्ट्रिंग प्रति वर्ण केवल एक बाइट का उपयोग करती है, और इसलिए बाइट्स में लंबाई वर्णों की संख्या के समान होती है।

प्रारंभिक स्थिति

यहां एक उदाहरण दिया गया है जो उस स्थिति को निर्दिष्ट करता है जिसके लिए खोज शुरू करनी है:

SELECT INSTR('That fat cat', 'at', 8)
FROM DUAL;

परिणाम:

11

इस मामले में, खोज स्थिति 8 से शुरू होती है, जो पहली दो घटनाओं के बाद होती है। इसलिए, हमें तीसरे मैच की स्थिति मिलती है।

कौन सी घटना निर्दिष्ट करें

यहां यह निर्दिष्ट करने का एक उदाहरण दिया गया है कि किस घटना को खोजना है:

SELECT INSTR('That fat cat', 'at', 1, 2)
FROM DUAL;

परिणाम:

7

इस मामले में, हमने स्थिति 1 से शुरू किया और फिर उस प्रारंभिक स्थिति से दूसरी घटना की खोज की।

यह फिर से है, लेकिन इस बार हम occurrence . के लिए तीन अलग-अलग मानों की तुलना करते हैं तर्क:

SELECT 
    INSTR('That fat cat', 'at', 1, 1) AS "o1",
    INSTR('That fat cat', 'at', 1, 2) AS "o2",
    INSTR('That fat cat', 'at', 1, 3) AS "o3"
FROM DUAL;

परिणाम:

   o1    o2    o3 
_____ _____ _____ 
    3     7    11

लेकिन अगर हम position तर्क:

SELECT 
    INSTR('That fat cat', 'at', 5, 1) AS "o1",
    INSTR('That fat cat', 'at', 5, 2) AS "o2",
    INSTR('That fat cat', 'at', 5, 3) AS "o3"
FROM DUAL;

परिणाम:

   o1    o2    o3 
_____ _____ _____ 
    7    11     0 

इस मामले में हमें पहली घटना की स्थिति नहीं मिलती है, क्योंकि यह हमारी प्रारंभिक स्थिति से पहले स्थित है। हमें 0 . भी मिलता है तीसरे कॉलम में क्योंकि हमारी शुरुआती स्थिति के आधार पर कोई तीसरी घटना नहीं होती है।

नकारात्मक स्थिति

स्थिति के लिए ऋणात्मक मान निर्दिष्ट करने से प्रारंभिक स्थिति को स्ट्रिंग के अंत से पीछे की ओर गिना जाता है, और Oracle उस स्थिति से पीछे की ओर खोज करता है:

SELECT INSTR('That fat cat', 'at', -3)
FROM DUAL;

परिणाम:

7

और निर्दिष्ट की गई कोई भी घटना उस स्थिति से पीछे की ओर गिना जाता है:

SELECT INSTR('That fat cat', 'at', -3, 2)
FROM DUAL;

परिणाम:

3

अशक्त तर्क

यदि कोई (या सभी) तर्क null . हैं , परिणाम null . है :

SET NULL 'null';
SELECT 
    INSTR(null, 'f', 1, 1) AS r1,
    INSTR('Coffee', null, 1, 1) AS r2,
    INSTR('Coffee', 'f', null, 1) AS r3,
    INSTR('Coffee', 'f', 1, null) AS r4
FROM DUAL;

परिणाम:

     R1      R2      R3      R4 
_______ _______ _______ _______ 
   null    null    null    null

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

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

गलत तर्क गणना

कॉलिंग INSTR() कोई तर्क पारित किए बिना त्रुटि उत्पन्न होती है:

SELECT INSTR()
FROM DUAL;

परिणाम:

Error starting at line : 1 in command -
SELECT INSTR()
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:

और बहुत अधिक तर्क पारित करने से भी त्रुटि होती है:

SELECT INSTR('Big fat cat', 'at', 1, 2, 3)
FROM DUAL;

परिणाम:

Error starting at line : 1 in command -
SELECT INSTR('Big fat cat', 'at', 1, 2, 3)
FROM DUAL
Error at Command Line : 1 Column : 38
Error report -
SQL Error: ORA-00939: too many arguments for function
00939. 00000 -  "too many arguments for function"
*Cause:    
*Action:

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. ओरेकल एसक्यूएल में गतिशील धुरी - प्रक्रिया

  2. APPLSYSPUB स्कीमा

  3. Oracle स्ट्रिंग एकत्रीकरण

  4. Oracle साक्षात्कार प्रश्न

  5. यदि पहला कॉलम मान समान है तो दूसरे कॉलम मान को कॉनकैट करें