समस्या:
आप MySQL में एक स्ट्रिंग को विभाजित करना चाहते हैं।
उदाहरण:
हमारे डेटाबेस में Student
कॉलम में डेटा के साथ id
और name
।
आईडी | <थ>नाम|
---|---|
1 | एन स्मिथ |
2 | मार्क ट्वेन |
3 | ब्रैड ग्रीन |
आइए कॉलम नाम से डेटा प्राप्त करें और इसे firstname
. में विभाजित करें और lastname
।
समाधान:
हम SUBSTRING_INDEX()
. का उपयोग करेंगे समारोह। ये रही क्वेरी:
SELECT SUBSTRING_INDEX(name,' ',1) AS firstname, SUBSTRING_INDEX(name,' ',-1) AS lastname FROM Student
ये रहा क्वेरी का नतीजा:
एन | स्मिथ |
चिह्नित करें | ट्वेन |
ब्रैड | हरा |
चर्चा:
फ़ंक्शन SUBSTRING_INDEX()
3 तर्क लेता है:स्रोत स्ट्रिंग, सीमांकक, और सीमांकक की घटना गणना।
स्रोत स्ट्रिंग वह स्ट्रिंग है जिसे हम विभाजित करना चाहते हैं।
सीमांकक वर्णों की एक स्ट्रिंग है जो SUBSTRING_INDEX()
फ़ंक्शन स्रोत स्ट्रिंग में ढूंढता है। जब पाया जाता है, तो यह उस स्थान को इंगित करता है जहां सबस्ट्रिंग समाप्त होती है। सीमांकक एक एकल वर्ण हो सकता है जैसे कि एक स्थान, लेकिन यह एक पैटर्न भी हो सकता है जिसमें दो या अधिक वर्ण होते हैं। यह पैटर्न केस संवेदी है; अर्थात्, यह मायने रखता है कि दिए गए वर्ण अपर केस हैं या लोअर केस। याद रखें कि सीमांकक एक स्ट्रिंग है, इसलिए इसे उद्धरणों ('') में लिखा जाना चाहिए।
अंतिम तर्क घटना गणना . है . यह इंगित करता है कि सीमांकक पैटर्न को कितनी बार मिलान करने की आवश्यकता है। ध्यान दें कि घटना संख्या एक नकारात्मक मान हो सकती है। जब यह ऋणात्मक होता है, तो हम सीमांकक की घटनाओं को दाईं ओर से गिनते हैं। जब गिनती एक धनात्मक संख्या होती है, तो हम बाईं ओर से गिनते हैं।
फ़ंक्शन स्रोत स्ट्रिंग के प्रत्येक वर्ण को तब तक आउटपुट करता है जब तक कि सीमांकक घटना संख्या द्वारा दिए गए समय की संख्या से मेल नहीं खाता।
अगर हम निम्नलिखित क्वेरी चलाते हैं:
SELECT SUBSTRING_INDEX('Ann Smith',' ',1);
आउटपुट होगा:
Ann
जैसा कि आप देख सकते हैं, फ़ंक्शन ने सभी वर्णों को तब तक लौटा दिया जब तक कि बाईं ओर से पहला स्थान नहीं मिल गया।
हमारे उदाहरण में, हम छात्र के पहले नाम के रूप में बाईं ओर से पहले स्थान तक के सभी वर्णों को पुनः प्राप्त करते हैं और छात्र के अंतिम नाम के रूप में दाईं ओर से पहले स्थान तक सभी वर्णों को पुनः प्राप्त करते हैं।