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: