समस्या:
आप SQL सर्वर में किसी भिन्न कॉलम से स्ट्रिंग मानों के साथ NULLs को जोड़ना चाहते हैं।
उदाहरण:
हमारे डेटाबेस में children निम्नलिखित कॉलम में डेटा के साथ:id (प्राथमिक कुंजी), first_name , मध्य_नाम , और last_name ।
| आईडी | <थ>प्रथम_नाममध्य_नाम | last_name | |
|---|---|---|---|
| 1 | लिंडा | NULL | जैक्सन |
| 2 | मैरी | एलिस | थॉमसन |
| 3 | NULL | स्टीवन | NULL |
| 4 | NULL | NULL | भूरा |
हम एक कॉलम से पहला नाम, अगले कॉलम से मध्य नाम, और अंतिम कॉलम से अंतिम नाम एक स्ट्रिंग के रूप में प्रदर्शित करना चाहते हैं, भले ही कॉलम में से कोई एक NULL स्टोर करता हो।
समाधान 2:
हम CONCAT() . का उपयोग करेंगे समारोह। यहां वह प्रश्न है जो आप लिखेंगे:
SELECT CONCAT(first_name, middle_name, last_name) AS name FROM children;
ये रहा परिणाम:
| नाम |
|---|
| लिंडा जैक्सन |
| मैरी ऐलिस थॉमसन |
| स्टीवन |
| भूरा |
चर्चा:
CONCAT() का उपयोग करें अभिव्यक्ति या कॉलम से स्ट्रिंग मानों को जोड़ने के लिए फ़ंक्शन जिसमें NULL होता है। यह फ़ंक्शन स्ट्रिंग्स (या NULLs) की एक सूची लेता है और इन सभी मानों को एक स्ट्रिंग में प्रदर्शित करता है। मानों के बीच कोई विभाजक नहीं है, इसलिए परिणाम (जैसा कि हमारे उदाहरण में है) आपकी अपेक्षा के अनुरूप प्रारूपित नहीं हो सकते हैं। हम इसे कैसे ठीक कर सकते हैं? एक और CONCAT() देखें क्वेरी:
समाधान 2:
यहां एक और क्वेरी विकल्प दिया गया है:
SELECT CONCAT(first_name,' ' , middle_name, ' ',last_name) AS name FROM children;
ये रहा परिणाम:
| नाम |
|---|
| लिंडा जैक्सन |
| मैरी एलिस थॉमसन |
| स्टीवन |
| भूरा |
अब, स्ट्रिंग मानों के अलावा, यह फ़ंक्शन कुछ रिक्त स्थान भी लेता है (समवर्ती मानों के बीच रखा जाता है)। यह नाम के एक हिस्से को दूसरे से अलग करता है। लेकिन जैसा कि हम देखते हैं, यह समाधान भी आदर्श नहीं है; मध्य नामों के बिना पूर्ण नामों में एक अतिरिक्त स्थान होता है, जबकि केवल एक नाम वाले रिकॉर्ड में दो अतिरिक्त स्थान होते हैं।
इस मामले में, CONCAT_WS() फ़ंक्शन बेहतर समाधान है।
समाधान 3:
CONCAT_WS() फ़ंक्शन एक अतिरिक्त पहला तर्क लेता है:एक वर्ण जो स्ट्रिंग्स के बीच विभाजक के रूप में कार्य करता है। ये रही क्वेरी:
SELECT
CONCAT_WS(' ' , first_name, middle_name, last_name) AS name
FROM children;
और परिणाम:
| नाम |
|---|
| लिंडा जैक्सन |
| मैरी एलिस थॉमसन |
| स्टीवन |
| भूरा |
यह क्वेरी बिना किसी अनावश्यक स्थान के बच्चों के पूरे नाम दिखाती है।