SQL सर्वर में, आप या तो CHARINDEX()
. का उपयोग कर सकते हैं फ़ंक्शन या PATINDEX()
एक स्ट्रिंग के भीतर एक स्ट्रिंग खोजने के लिए कार्य। ये Transact-SQL स्ट्रिंग फ़ंक्शन हैं, और ये Azure डेटाबेस पर भी उपलब्ध हैं।
सतह पर, ये कार्य ठीक वैसा ही करते प्रतीत होते हैं, और कई मामलों में, आप जो भी उपयोग करना चाहते हैं उसका उपयोग कर सकते हैं।
हालाँकि, कुछ अंतर हैं जो यह निर्धारित कर सकते हैं कि आप कुछ परिदृश्यों में किस फ़ंक्शन का उपयोग करने का निर्णय लेते हैं। इन्हें निम्नलिखित द्वारा संक्षेपित किया जा सकता है:
PATINDEX()
आपको पैटर्न खोजने के लिए वाइल्डकार्ड वर्णों का उपयोग करने की अनुमति देता है।CHARINDEX()
नहीं।CHARINDEX()
एक तीसरा तर्क स्वीकार करता है जो आपको खोज की आरंभ स्थिति निर्दिष्ट करने की अनुमति देता है।PATINDEX()
नहीं।
नीचे इन बिंदुओं के बारे में अधिक जानकारी दी गई है।
परिभाषा
सबसे पहले, आइए आधिकारिक परिभाषा या प्रत्येक कार्य को देखें।
CHARINDEX()
- दूसरे वर्ण व्यंजक के अंदर एक वर्ण व्यंजक की खोज करता है, यदि पाया जाता है तो प्रथम व्यंजक की आरंभिक स्थिति लौटाता है।
PATINDEX()
- सभी मान्य टेक्स्ट और कैरेक्टर डेटा प्रकारों पर किसी निर्दिष्ट एक्सप्रेशन में पैटर्न की पहली घटना की प्रारंभिक स्थिति देता है, या पैटर्न नहीं मिलने पर शून्य देता है।
सिंटैक्स
और यहां प्रत्येक फ़ंक्शन का आधिकारिक सिंटैक्स है।
CHARINDEX()
CHARINDEX ( expressionToFind , expressionToSearch [ , start_location ] )
PATINDEX ()
PATINDEX ( '%pattern%' , expression )
तो दोनों फ़ंक्शन आपको वर्ण व्यंजक की खोज करने की अनुमति देते हैं, हालांकि PATINDEX()
फ़ंक्शन आपको पैटर्न . खोजने की अनुमति देता है . तो यह अतिरिक्त कार्यक्षमता है जो आपको CHARINDEX()
. के साथ नहीं मिलती है समारोह। PATINDEX()
. के साथ आप खोज के लिए एक पैटर्न निर्दिष्ट करने के लिए वाइल्डकार्ड वर्णों का उपयोग कर सकते हैं, जो कुछ स्थितियों में बहुत उपयोगी हो सकता है।
हालांकि, CHARINDEX()
तीन तर्क स्वीकार करता है जबकि PATINDEX()
केवल दो स्वीकार करता है। CHARINDEX()
फ़ंक्शन एक वैकल्पिक तीसरा तर्क स्वीकार करता है जो आपको खोज की प्रारंभिक स्थिति निर्दिष्ट करने की अनुमति देता है। दूसरे शब्दों में, CHARINDEX()
फ़ंक्शन आपको केवल उन मैचों को वापस करने की अनुमति देता है जो स्ट्रिंग में एक निश्चित बिंदु के बाद होते हैं।
उदाहरण
यहां ऐसे उदाहरण दिए गए हैं जो प्रत्येक फ़ंक्शन द्वारा प्रदान की गई अतिरिक्त कार्यक्षमता को प्रदर्शित करते हैं।
CHARINDEX()
यहां, मैं खोज शुरू करने के लिए स्थिति निर्दिष्ट करने के लिए तीसरा तर्क प्रदान करता हूं। इस मामले में, यह Bob
. की पहली घटना को छोड़ देगा और यह दूसरी घटना की स्थिति लौटा देगा।
SELECT CHARINDEX('Bob', 'Bob likes beer. Bob also likes beef.', 16);
परिणाम:
17
तो जैसा कि बताया गया है, आप PATINDEX()
. के साथ ऐसा नहीं कर सकते हैं क्योंकि यह उस तीसरे पैरामीटर को स्वीकार नहीं करता है।
PATINDEX ()
अब यहां कुछ ऐसा उदाहरण दिया गया है जो आप PATINDEX()
. के साथ कर सकते हैं कि आप CHARINDEX()
. के साथ ऐसा नहीं कर सकते . इस उदाहरण में, हम पैटर्न खोजने के लिए वाइल्डकार्ड वर्णों का उपयोग करते हैं:
SELECT PATINDEX('%b_er%', 'Bob likes beer.');
परिणाम:
11
इस मामले में, हम प्रतिशत चिह्नों का उपयोग करते हैं (%
) जो यह इंगित करने के लिए वाइल्डकार्ड हैं कि कितने भी वर्ण आगे बढ़ सकते हैं और हमारी खोज स्ट्रिंग को सफल कर सकते हैं। हम अंडरस्कोर का भी उपयोग करते हैं (_
) जो किसी भी एकल . के लिए वाइल्डकार्ड है चरित्र।
निष्कर्ष
तो जबकि दोनों CHARINDEX()
और PATINDEX()
समान कार्यक्षमता प्रदान करते हैं, और कई मामलों में, दूसरे के बजाय किसी एक का उपयोग किया जा सकता है, ऐसे समय होते हैं जब आपको एक का दूसरे के ऊपर उपयोग करने की आवश्यकता होती है।
विशेष रूप से, आप CHARINDEX()
. का उपयोग करेंगे जब आप खोज करने के लिए स्ट्रिंग के भीतर एक प्रारंभिक स्थिति निर्दिष्ट करना चाहते हैं। और आप PATINDEX()
. का उपयोग करेंगे जब भी आपको खोजने के लिए कोई प्रतिमान निर्दिष्ट करने की आवश्यकता हो।