SQL सर्वर में, आप T-SQL CHARINDEX()
. का उपयोग कर सकते हैं फ़ंक्शन या PATINDEX()
किसी अन्य स्ट्रिंग के भीतर एक स्ट्रिंग खोजने के लिए कार्य करें। यहां प्रत्येक फ़ंक्शन का त्वरित अवलोकन दिया गया है।
CHARINDEX() फ़ंक्शन
यह फ़ंक्शन 3 तर्क स्वीकार करता है; खोजने के लिए स्ट्रिंग, खोजने के लिए स्ट्रिंग, और एक वैकल्पिक प्रारंभ स्थिति।
CHARINDEX()
वाक्य रचना इस प्रकार है:
CHARINDEX ( expressionToFind , expressionToSearch [ , start_location ] )
जहां expressionToFind वह अभिव्यक्ति है जिसे आप अन्य स्ट्रिंग में खोजना चाहते हैं, और expressionToSearch दूसरी स्ट्रिंग है। वैकल्पिक start_location expressionToSearch . के भीतर स्थिति निर्दिष्ट करने के लिए इस्तेमाल किया जा सकता है जिसके लिए खोजना शुरू करना है।
ध्यान दें कि केवल पहली घटना की स्थिति लौटा दी जाती है।
उदाहरण
यहां एक उदाहरण दिया गया है:
SELECT CHARINDEX('Bob', 'Bob likes beer. Bob also likes beef.');
परिणाम:
1
इस उदाहरण में, पहला तर्क Bob
है , जिसका अर्थ है कि हम Bob
. के लिए दूसरा तर्क खोज रहे हैं . परिणाम 1 है क्योंकि यह वह स्थिति है जहां Bob
पहले दूसरे तर्क में प्रकट होता है।
आप यह भी देख सकते हैं कि Bob
वास्तव में स्ट्रिंग में दो बार दिखाई देता है, लेकिन केवल पहले मैच की स्थिति लौटा दी जाती है।
कोई मिलान नहीं
यदि दूसरे तर्क में Bob
नहीं था नतीजा 0
होता ।
SELECT CHARINDEX('Kate', 'Bob likes beer. Bob also likes beef.');
परिणाम:
0
प्रारंभिक स्थिति निर्दिष्ट करना
आप एक प्रारंभिक स्थिति निर्दिष्ट कर सकते हैं जहां खोज शुरू करना है। इसका मतलब है कि SQL सर्वर उस प्रारंभिक स्थिति से पहले आने वाली किसी भी घटना को छोड़ देगा। हालांकि, परिणाम अभी भी स्ट्रिंग के भीतर इसकी स्थिति के आधार पर रिपोर्ट किए जाते हैं (प्रारंभ स्थिति से नहीं)।
यदि यह भ्रमित करने वाला लगता है, तो निम्न उदाहरण से मदद मिलनी चाहिए:
SELECT CHARINDEX('Bob', 'Bob likes beer. Bob also likes beef.', 16);
परिणाम:
17
तो इस उदाहरण में हम स्थिति 16 पर खोज करना शुरू करते हैं (जो दूसरे Bob
से पहले का स्थान होता है। ) नतीजा यह है कि Bob
. की पहली घटना छोड़ दिया जाता है, और दूसरे की स्थिति वापस कर दी जाती है। और हम देख सकते हैं कि इसकी स्थिति स्ट्रिंग की शुरुआत से 17 वर्णों की है (भले ही यह केवल एक वर्ण है जहाँ से हमने खोजना शुरू किया है)।
केस-सेंसिटिविटी
आप अपने चयन कथन में COLLATE क्लॉज जोड़कर स्पष्ट रूप से केस-संवेदी खोज कर सकते हैं:
केस-संवेदी
यहाँ एक केस-संवेदी खोज है:
SELECT CHARINDEX('Beer', 'Bob likes beer.' COLLATE Latin1_General_CS_AS);
परिणाम:
0
यह केस-संवेदी है क्योंकि _CS
केस-सेंसिटिव के लिए खड़ा है।
केस-असंवेदनशील
और यहाँ एक केस-संवेदी खोज है:
SELECT CHARINDEX('Beer', 'Bob likes beer.' COLLATE Latin1_General_CI_AS);
परिणाम:
11
यह केस-संवेदी नहीं है क्योंकि _CI
केस-असंवेदनशील के लिए खड़ा है।
PATINDEX() फ़ंक्शन
PATINDEX()
फ़ंक्शन CHARINDEX()
. के समान कार्य करता है . आपके पास मूल रूप से एक विकल्प है कि किसका उपयोग करना है। मुख्य अंतर वाक्य रचना में है।
PATINDEX()
फ़ंक्शन का सिंटैक्स इस प्रकार है:
PATINDEX ( '%pattern%' , expression )
जहां पैटर्न एक वर्ण व्यंजक है जिसमें पाया जाने वाला अनुक्रम होता है, और अभिव्यक्ति खोजी जाने वाली अभिव्यक्ति है (आमतौर पर एक कॉलम)।
PATINDEX()
वाइल्डकार्ड वर्ण स्वीकार करता है, लेकिन प्रारंभिक स्थिति नहीं। CHARINDEX()
दूसरी ओर एक प्रारंभिक स्थिति स्वीकार करता है, लेकिन वाइल्डकार्ड वर्ण नहीं।
उदाहरण
यहां एक उदाहरण दिया गया है:
SELECT PATINDEX('%eer%', 'Bob likes beer.');
परिणाम:
12
हालांकि, जब हम वाइल्डकार्ड वर्ण शामिल नहीं करते हैं तो यहां क्या होता है:
SELECT PATINDEX('eer', 'Bob likes beer.');
परिणाम:
0
यहां एक और उदाहरण दिया गया है जहां हम एक और वाइल्डकार्ड वर्ण पेश करते हैं:
SELECT PATINDEX('%b_er%', 'Bob likes beer.');
परिणाम:
11
इस मामले में, अंडरस्कोर (_
) जो किसी एक वर्ण के लिए वाइल्डकार्ड है।