SQL सर्वर में, आप T-SQL PATINDEX()
. का उपयोग कर सकते हैं एक स्ट्रिंग के भीतर एक पैटर्न खोजने के लिए कार्य करें। विशेष रूप से, फ़ंक्शन केवल पहले . लौटाता है स्ट्रिंग के भीतर पैटर्न की घटना।
फ़ंक्शन दो तर्क स्वीकार करता है; पैटर्न, और स्ट्रिंग।
आप पैटर्न में वाइल्डकार्ड वर्णों का उपयोग कर सकते हैं।
सिंटैक्स
वाक्य रचना इस प्रकार है:
PATINDEX ( '%pattern%' , expression )
जहां पैटर्न एक वर्ण व्यंजक है जिसमें पाया जाने वाला अनुक्रम होता है, और अभिव्यक्ति खोजी जाने वाली अभिव्यक्ति है।
उदाहरण 1 - मूल उपयोग
यह कैसे काम करता है इसका एक उदाहरण यहां दिया गया है:
SELECT PATINDEX('%eer%', 'Bob likes beer.') AS Result;
परिणाम:
+----------+ | Result | |----------| | 12 | +----------+
प्रतिशत चिह्न (%
) एक वाइल्डकार्ड वर्ण है जो शून्य या अधिक वर्णों की किसी भी स्ट्रिंग का प्रतिनिधित्व करता है।
उदाहरण 2 - कोई मिलान नहीं
यहां बताया गया है कि जब हम वाइल्डकार्ड वर्ण शामिल नहीं करते हैं तो क्या होता है:
SELECT PATINDEX('eer', 'Bob likes beer.') AS Result;
परिणाम:
+----------+ | Result | |----------| | 0 | +----------+
हालांकि, अगर पूरी स्ट्रिंग बिना किसी वाइल्डकार्ड के पैटर्न से मेल खाती है, तो आपको एक मैच मिलेगा:
SELECT PATINDEX('Bob', 'Bob') AS Result;
परिणाम:
+----------+ | Result | |----------| | 1 | +----------+
हालांकि, यदि स्ट्रिंग में अधिक वर्ण हैं तो आपको मिलान नहीं मिलेगा:
SELECT PATINDEX('Bob', 'Bob likes beer.') AS Result;
परिणाम:
+----------+ | Result | |----------| | 0 | +----------+
किस स्थिति में आप एक वाइल्डकार्ड का उपयोग कर सकते हैं:
SELECT PATINDEX('Bob%', 'Bob likes beer.') AS Result;
परिणाम:
+----------+ | Result | |----------| | 1 | +----------+
आप पैटर्न के बीच में कहीं भी एक वाइल्डकार्ड का उपयोग कर सकते हैं:
SELECT PATINDEX('B%r.', 'Bob likes beer.') AS Result;
परिणाम:
+----------+ | Result | |----------| | 1 | +----------+
इस मामले में हमें एक मैच मिला क्योंकि स्ट्रिंग का प्रारंभ और अंत पैटर्न के प्रारंभ और अंत से मेल खाता था। बेशक, स्ट्रिंग का मध्य भी पैटर्न के मध्य से मेल खाता है, क्योंकि अन्य सभी वर्ण प्रतिशत चिह्न से ढके होते हैं।
उदाहरण 3 - अंडरस्कोर वाइल्डकार्ड
यहां एक और उदाहरण दिया गया है जहां हम एक और वाइल्डकार्ड वर्ण पेश करते हैं:
SELECT PATINDEX('B_er', 'Beer') AS Result;
परिणाम:
+----------+ | Result | |----------| | 1 | +----------+
अंडरस्कोर (_
) जो किसी एक वर्ण के लिए वाइल्डकार्ड है। इसलिए, यह केवल तभी मेल खाएगा जब उस स्थिति में ठीक एक वर्ण हो।
बेशक, उपरोक्त पैटर्न कई अलग-अलग तारों से मेल खा सकता है। उदाहरण के लिए:
SELECT PATINDEX('B_er', 'Beer') AS 'Beer', PATINDEX('B_er', 'Bier') AS 'Bier', PATINDEX('B_er', 'Baer') AS 'Baer', PATINDEX('B_er', 'B er') AS 'B er';
परिणाम:
+--------+--------+--------+--------+ | Beer | Bier | Baer | B er | |--------+--------+--------+--------| | 1 | 1 | 1 | 1 | +--------+--------+--------+--------+
उदाहरण 4 - _
की तुलना करना और %
वाइल्डकार्ड
यह उदाहरण _
. के बीच के अंतर को दर्शाता है और %
वाइल्डकार्ड वर्ण।
SELECT PATINDEX('B%r', 'Beer') AS '%', PATINDEX('B_r', 'Beer') AS '_', PATINDEX('B__r', 'Beer') AS '__';
परिणाम:
+-----+-----+------+ | % | _ | __ | |-----+-----+------| | 1 | 0 | 1 | +-----+-----+------+
अंडरस्कोर केवल तभी मेल खाता है जब उस स्थिति में बिल्कुल एक वर्ण हो। दो वर्णों से मेल खाने के लिए, हमें दो अंडरस्कोर का उपयोग करने की आवश्यकता है।
दूसरी ओर प्रतिशत चिह्न, शून्य सहित किसी भी वर्ण से मेल खाता है, जैसा कि निम्न उदाहरण में देखा गया है:
SELECT PATINDEX('Bee%r', 'Beer') AS '%', PATINDEX('Bee_r', 'Beer') AS '_', PATINDEX('Bee__r', 'Beer') AS '__';
परिणाम:
+-----+-----+------+ | % | _ | __ | |-----+-----+------| | 1 | 0 | 0 | +-----+-----+------+
उदाहरण 5 - एक डेटाबेस उदाहरण
डेटाबेस क्वेरी में इस फ़ंक्शन का उपयोग करने का एक उदाहरण यहां दिया गया है:
USE Music; SELECT AlbumName, PATINDEX('%the%', AlbumName) AS 'Pattern Index' FROM Albums WHERE PATINDEX('%the%', AlbumName) > 0;
परिणाम:
+-------------------------+-----------------+ | AlbumName | Pattern Index | |-------------------------+-----------------| | Singing Down the Lane | 14 | | Ziltoid the Omniscient | 9 | | No Prayer for the Dying | 15 | | The Sixteen Men of Tain | 1 | +-------------------------+-----------------+
इस मामले में मैं WHERE
. का उपयोग करता हूं केवल उन एल्बमों को वापस करने के लिए खंड जो वास्तव में मेल खाते हैं, उनके साथ PATINDEX()
नतीजा। अगर मैंने WHERE
छोड़ दिया खंड, सभी एल्बम वापस कर दिए गए होंगे, भले ही वे मेल खाते हों या नहीं।
जो मेल नहीं खाते, उनके लिए PATINDEX()
परिणाम शून्य होगा।
USE Music; SELECT TOP(10) AlbumName, PATINDEX('%the%', AlbumName) AS 'Pattern Index' FROM Albums;
परिणाम:
+-------------------------+-----------------+ | AlbumName | Pattern Index | |-------------------------+-----------------| | Powerslave | 0 | | Powerage | 0 | | Singing Down the Lane | 14 | | Ziltoid the Omniscient | 9 | | Casualties of Cool | 0 | | Epicloud | 0 | | Somewhere in Time | 0 | | Piece of Mind | 0 | | Killers | 0 | | No Prayer for the Dying | 15 | +-------------------------+-----------------+
उदाहरण 6 - केवल पहली घटना
जैसा कि बताया गया है, PATINDEX()
केवल पहले . लौटाता है स्ट्रिंग के भीतर पैटर्न की घटना।
SELECT PATINDEX('%and%', 'Bob and beer and popcorn.') AS Result;
परिणाम:
+----------+ | Result | |----------| | 5 | +----------+
द CHARINDEX()
समारोह
टी-एसक्यूएल CHARINDEX()
फ़ंक्शन PATINDEX()
के समान है . हालाँकि, दोनों के बीच कुछ अंतर हैं। विशेष रूप से, PATINDEX()
वाइल्डकार्ड वर्ण स्वीकार करता है, लेकिन प्रारंभिक स्थिति नहीं। CHARINDEX()
दूसरी ओर एक प्रारंभिक स्थिति स्वीकार करता है, लेकिन वाइल्डकार्ड वर्ण नहीं।