समस्या:
PostgreSQL/MySQL में एक स्ट्रिंग से सबस्ट्रिंग कैसे निकालें
उदाहरण 1:
emails तालिका, एक ईमेल कॉलम है। आप प्रत्येक ईमेल के पहले सात वर्ण प्रदर्शित करना चाहेंगे।
तालिका इस तरह दिखती है:
| ईमेल |
|---|
| jake99@gmail.com |
| tamarablack@zoho.com |
| notine@yahoo.fr |
| jessica1995@onet.pl |
समाधान 1:
SELECT email, SUBSTRING(email, 1, 7) AS substring FROM emails;
एक और सिंटैक्स:
SELECT email, SUBSTRING(email FROM 1 FOR 7) AS substring FROM emails;
नतीजा यह है:
| ईमेल | सबस्ट्रिंग |
|---|---|
| jake99@gmail.com | जेक99@ |
| tamarablack@zoho.com | तामारब |
| notine@yahoo.fr | नोटिन@ |
| jessica1995@onet.pl | जेसिका |
चर्चा:
SUBSTRING() का प्रयोग करें समारोह। पहला तर्क स्ट्रिंग या स्तंभ नाम है। दूसरा तर्क उस चरित्र का सूचकांक है जिस पर सबस्ट्रिंग शुरू होनी चाहिए। तीसरा तर्क सबस्ट्रिंग की लंबाई है।
ध्यान रहें! कुछ अन्य प्रोग्रामिंग भाषाओं के विपरीत, सूचकांक 1 से शुरू होते हैं , 0 नहीं। इसका मतलब है कि पहले वर्ण में अनुक्रमणिका 1 है, दूसरे वर्ण में अनुक्रमणिका 2, आदि है।
SUBSTRING(email, 1, 7) ईमेल कॉलम में मानों के सबस्ट्रिंग लौटाएगा जो स्ट्रिंग्स (प्रथम वर्ण) की शुरुआत में शुरू होता है और सात वर्णों के लिए जाता है। अन्य संकेतन, SUBSTRING(email FROM 1 FOR 7) , ठीक वैसा ही करता है। FROM . के बाद का तर्क प्रारंभिक अनुक्रमणिका है, और FOR . के बाद तर्क है सबस्ट्रिंग लंबाई है।
SUBSTRING() . का तीसरा तर्क समारोह वैकल्पिक है। यदि आप इसे छोड़ देते हैं, तो आपको वह सबस्ट्रिंग मिल जाएगी जो दूसरे तर्क में अनुक्रमणिका से शुरू होती है और स्ट्रिंग के अंत तक जाती है। SUBSTRING(email, 1) पूरी स्ट्रिंग लौटाएगा, ठीक वैसे ही जैसे SUBSTRING(email FROM 1) ।
उदाहरण 2:
आप इंडेक्स 2 और 6 (समावेशी) के बीच सबस्ट्रिंग प्रदर्शित करना चाहते हैं।
समाधान 2:
SELECT email, SUBSTRING(email, 2, 5) AS substring FROM emails;
एक और सिंटैक्स:
SELECT
email,
SUBSTRING(email FROM POSITION('@' IN email)) AS substring
FROM emails;
नतीजा यह है:
| ईमेल | सबस्ट्रिंग |
|---|---|
| jake99@gmail.com | @gmail.com |
| tamarablack@zoho.com | @zoho.com |
| notine@yahoo.fr | @yahoo.fr |
| jessica1995@onet.pl | @onet.pl |
चर्चा:
आप SUBSTRING() . का उपयोग करते हैं पिछले उदाहरणों की तरह कार्य करें। इस बार, आप एक विशिष्ट चरित्र की तलाश कर रहे हैं जिसकी स्थिति पंक्ति से पंक्ति में भिन्न हो सकती है। विशिष्ट वर्ण की अनुक्रमणिका खोजने के लिए, आप POSITION(character IN column) का उपयोग कर सकते हैं फ़ंक्शन, जहां वर्ण विशिष्ट वर्ण है जिस पर आप सबस्ट्रिंग प्रारंभ करना चाहते हैं (यहां, @ ) . तर्क स्तंभ column है जिससे आप सबस्ट्रिंग को पुनः प्राप्त करना चाहते हैं; यह एक शाब्दिक स्ट्रिंग भी हो सकता है।
यदि आप चाहते हैं कि सबस्ट्रिंग मूल स्ट्रिंग के अंत तक जाए, तो SUBSTRING() में तीसरा तर्क फ़ंक्शन (या FOR तर्क) की आवश्यकता नहीं है। अन्यथा, यह सबस्ट्रिंग की लंबाई होनी चाहिए, या आप POSITION() का उपयोग करके इसकी गणना कर सकते हैं समारोह। आप एक ऐसे सबस्ट्रिंग को भी पुनः प्राप्त करना चाह सकते हैं जो स्ट्रिंग के अंत में समाप्त नहीं होता है, लेकिन कुछ विशिष्ट वर्ण पर, उदाहरण के लिए, '.' से पहले। यहां एक उदाहरण दिया गया है:
SELECT
email,
SUBSTRING(email, POSITION('@' IN email), POSITION('.' IN email) - POSITION('@' IN email)) AS substring
FROM emails;
एक और सिंटैक्स:
SELECT
email,
SUBSTRING(email FROM POSITION('@' IN email) FOR POSITION('.' IN email) - POSITION('@' IN email)) AS substring
FROM emails;
इस क्वेरी का परिणाम है:
| ईमेल | सबस्ट्रिंग |
|---|---|
| jake99@gmail.com | @gmail |
| tamarablack@zoho.com | @zoho |
| notine@yahoo.fr | @yahoo |
| jessica1995@onet.pl | @onet |
भाग POSITION('.' IN email) - POSITION('@' IN email) बस सबस्ट्रिंग की लंबाई की गणना करता है।