स्ट्रिंग प्रकार के कॉलम जैसे character(2)
. के साथ (जैसा कि आपने बाद में उल्लेख किया है), प्रदर्शित संयोजन सिर्फ इसलिए काम करता है, क्योंकि मैनुअल को उद्धृत करते हुए:
[...] स्ट्रिंग कॉन्सटेनेशन ऑपरेटर (||
) गैर-स्ट्रिंग इनपुट स्वीकार करता है, जब तक कि कम से कम एक इनपुट स्ट्रिंग प्रकार का हो , जैसा कि तालिका 9.8 में दिखाया गया है। अन्य मामलों के लिए, text
. पर स्पष्ट दबाव डालें [...]
बोल्ड जोर मेरा। दूसरा उदाहरण (select a||', '||b from foo
) किसी भी . के लिए काम करता है टाइप न किए गए स्ट्रिंग शाब्दिक ', '
. के बाद से डेटा प्रकार डिफ़ॉल्ट रूप से text
टाइप करने के लिए किसी भी स्थिति में संपूर्ण अभिव्यक्ति को मान्य बनाना।
गैर-स्ट्रिंग डेटा प्रकारों के लिए, आप text
पर कम से कम एक तर्क कास्ट करके पहले कथन को "ठीक" कर सकते हैं . (कोई भी प्रकार को text
में डाला जा सकता है ):
SELECT a::text || b AS ab FROM foo;
अपने स्वयं के उत्तर से देखते हुए, "काम नहीं करता " का अर्थ था "रिटर्न NULL ". कुछ भी . का परिणाम NULL से जुड़ा हुआ NULL है। अगर नल मान शामिल किए जा सकते हैं और परिणाम NULL नहीं होगा, concat_ws()
use का उपयोग करें किसी भी संख्या में मानों को संयोजित करने के लिए (9.1 या बाद के संस्करण पोस्ट करें):
SELECT concat_ws(', ', a, b) AS ab FROM foo;
विभाजक केवल गैर-शून्य मानों के बीच जोड़े जाते हैं, अर्थात केवल जहां आवश्यक हो।
या concat()
यदि आपको विभाजकों की आवश्यकता नहीं है:
SELECT concat(a, b) AS ab FROM foo;
यहां टाइप कास्ट की कोई आवश्यकता नहीं है क्योंकि दोनों फंक्शन "any"
take लेते हैं टेक्स्ट प्रस्तुतीकरण के साथ इनपुट और कार्य करें।
अधिक विवरण (और क्यों COALESCE
एक गरीब विकल्प है) इस संबंधित उत्तर में:
- दो कॉलमों को मिलाएं और एक नए कॉलम में जोड़ें
टिप्पणी में अपडेट के बारे में
+
Postgres (या मानक SQL) में स्ट्रिंग संयोजन के लिए मान्य ऑपरेटर नहीं है। इसे अपने उत्पादों में जोड़ना Microsoft का निजी विचार है।
<स्ट्राइक> character(n)
का उपयोग करने का शायद ही कोई अच्छा कारण है स्ट्राइक> (समानार्थी:<स्ट्राइक> char(n)
स्ट्राइक> ) text
का प्रयोग करें या varchar
. विवरण:
- स्ट्रिंग्स को स्टोर करने के लिए डेटा प्रकार "टेक्स्ट" का उपयोग करने में कोई कमी है?
- "खाली या शून्य मान" की जांच करने का सबसे अच्छा तरीका