अधिकांश प्रमुख डीबीएमएस हमें एसक्यूएल का उपयोग करके एक स्ट्रिंग के भीतर एक स्ट्रिंग खोजने का एक तरीका प्रदान करते हैं। इसके द्वारा, मेरा मतलब है कि एक स्ट्रिंग के भीतर एक सबस्ट्रिंग की स्थिति खोजने के लिए SQL क्वेरी का उपयोग करें।
कई SQL फ़ंक्शन हैं जो हमें ऐसा करने की अनुमति देते हैं, जिसमें INSTR()
. शामिल हैं , LOCATE()
, POSITION()
, और CHARINDEX()
. आपके द्वारा उपयोग किया जाने वाला फ़ंक्शन आपके DBMS पर निर्भर करेगा, और संभवत:आपको एक प्रारंभिक स्थिति निर्दिष्ट करने की आवश्यकता है या नहीं।
ओरेकल
Oracle में एक INSTR()
है फ़ंक्शन जो एक स्ट्रिंग के भीतर दिए गए सबस्ट्रिंग की प्रारंभिक स्थिति देता है।
उदाहरण:
SELECT INSTR('Big fat cat', 'fat')
FROM DUAL;
परिणाम:
5
यह हमें दिखाता है कि सबस्ट्रिंग fat
स्ट्रिंग में स्थिति 5 से शुरू होता है Big fat cat
.
तीसरे तर्क को पारित करके प्रारंभिक स्थिति निर्दिष्ट करना संभव है। हम यह निर्दिष्ट करने के लिए चौथा तर्क भी पारित कर सकते हैं कि कौन सी घटना को खोजना है:
SELECT INSTR('That fat cat', 'at', 1, 2)
FROM DUAL;
परिणाम:
7
इस मामले में मैंने 1
. स्थिति पर खोज शुरू की और दूसरी घटना की खोज की (2
. का उपयोग करके) चौथे तर्क के रूप में)।
Oracle में एक INSTRB()
भी है फ़ंक्शन जो समान कार्य करता है, सिवाय इसके कि यह बाइट्स के आधार पर स्थिति लौटाता है।
MySQL
MySQL में एक INSTR()
है फ़ंक्शन जो Oracle डेटाबेस के समान नाम के फ़ंक्शन के समान कार्य करता है:
SELECT INSTR('Cats and dogs like to run', 'dogs');
परिणाम:
10
हालांकि, यदि आपको एक प्रारंभिक स्थिति निर्दिष्ट करने की आवश्यकता है, तो आपको या तो LOCATE()
का उपयोग करना होगा या POSITION()
:
SELECT LOCATE('cat', 'One cat jumped over the other cat', 6);
परिणाम:
31
यहाँ, cat
. की पहली घटना स्थिति 5 से शुरू होता है, लेकिन मैंने खोज को स्थिति 6 पर शुरू करने के लिए निर्दिष्ट किया है। इसलिए, उस स्ट्रिंग की अगली घटना की स्थिति वह थी जो लौटा दी गई थी।
ध्यान दें कि, हालांकि खोज स्थिति 6 पर शुरू हुई, फिर भी फ़ंक्शन स्ट्रिंग के भीतर सबस्ट्रिंग की स्थिति लौटाता है - प्रारंभ स्थिति से नहीं।
POSITION()
फ़ंक्शन LOCATE()
. के दो-तर्क सिंटैक्स का पर्याय है , लेकिन थोड़े अलग सिंटैक्स के साथ (POSITION()
हमें प्रारंभिक स्थिति निर्दिष्ट करने की अनुमति नहीं देता है)।
MySQL में एक REGEX_INSTR()
भी है फ़ंक्शन जो निर्दिष्ट पैटर्न द्वारा निर्दिष्ट नियमित अभिव्यक्ति से मेल खाने वाले स्ट्रिंग के सबस्ट्रिंग की प्रारंभिक अनुक्रमणिका देता है।
मारियाडीबी
MySQL की तरह, MariaDB में भी एक INSTR()
है फ़ंक्शन, साथ ही एक a LOCATE()
और POSITION()
समारोह:
SELECT
INSTR('No news is good news', 'news') AS "INSTR",
POSITION('news' IN 'No news is good news') AS "POSITION",
LOCATE('news', 'No news is good news') AS "LOCATE 1",
LOCATE('news', 'No news is good news', 5) AS "LOCATE 2";
परिणाम:
+-------+----------+----------+----------+ | INSTR | POSITION | LOCATE 1 | LOCATE 2 | +-------+----------+----------+----------+ | 4 | 4 | 4 | 17 | +-------+----------+----------+----------+
MariaDB का एक REGEX_INSTR()
भी है फ़ंक्शन जो निर्दिष्ट पैटर्न द्वारा निर्दिष्ट नियमित अभिव्यक्ति से मेल खाने वाले स्ट्रिंग के सबस्ट्रिंग की प्रारंभिक अनुक्रमणिका देता है।
एसक्यूएल सर्वर
जब SQL सर्वर की बात आती है, तो CHARINDEX()
फ़ंक्शन वह है जिसे हम ढूंढ रहे हैं:
SELECT CHARINDEX('Bob', 'Bob likes beer. Bob also likes beef.', 16);
परिणाम:
17
इस मामले में मैंने प्रारंभिक स्थिति निर्दिष्ट करने के लिए वैकल्पिक तीसरे तर्क का उपयोग किया।
SQL सर्वर में एक PATINDEX()
भी होता है फ़ंक्शन जो एक स्ट्रिंग के भीतर एक पैटर्न की खोज करता है।
SQLite
SQLite में एक INSTR()
है हमारी जरूरतों को पूरा करने के लिए कार्य करता है:
SELECT INSTR('Black cat', 'lack');
परिणाम:
2
पोस्टग्रेएसक्यूएल
PostgreSQL में, हमें POSITION()
. का उपयोग करने की आवश्यकता है समारोह:
SELECT POSITION('Break' IN 'Bangkok Breaking');
परिणाम:
9