आप अपने कॉलम मानों को char(n)
. पर कास्ट कर रहे हैं , जो छोटे स्ट्रिंग्स और संख्याओं को पैड करेगा (अंतर्निहित रूप से स्ट्रिंग्स में परिवर्तित) को n वर्ण, और लंबे मानों को छोटा करें। (यह varchar2(n)
. का उपयोग करने से बेहतर है , जो लंबी संख्याओं के साथ त्रुटि करेगा और छोटी स्ट्रिंग्स पर कोई फर्क नहीं पड़ेगा)।
हालांकि, आपको नल के साथ समस्या होगी, जैसा कि cast(null as char(n))
- या कुछ और - n . के बजाय अभी भी शून्य है रिक्त स्थान जैसा आप उम्मीद कर सकते हैं। यह आपके किसी भी कॉलम के लिए समस्या हो सकती है, लेकिन विशेष रूप से आपके केस एक्सप्रेशन के लिए।
यदि कोई कॉलम शून्य हो सकता है तो आप nvl
. का उपयोग कर सकते हैं या coalesce
इसके बजाय उन्हें एक ही स्थान के रूप में व्यवहार करने के लिए, और कास्ट फिर उन्हें भी पैड करेगा:
cast(coalesce(First_name, ' ') as char(20))
कास्ट करने के बजाय, आप rpad()
. का भी उपयोग कर सकते हैं :
rpad(coalesce(First_name, ' '), 20, ' ')
केस एक्सप्रेशन के लिए आप else
. बना सकते हैं क्लॉज शून्य के बजाय एक ही स्थान पर मूल्यांकन करता है, लेकिन आपको कास्ट को समग्र केस एक्सप्रेशन पर लागू करने की भी आवश्यकता है, न कि एक when
के भीतर शाखा; तो इसके बजाय:
max(case when email_Rank = 1 then cast(email_address as char(100)) else null end)
आप करेंगे:
cast(max(case when email_Rank = 1 then email_address else ' ' end) as char(100))
या यदि आप पसंद करते हैं:
cast(coalesce(max(case when email_Rank = 1 then email_address end), ' ') as char(100))
हो सकता है कि आपका क्लाइंट समग्र स्ट्रिंग को समान लंबाई में राइट-पैडिंग कर रहा हो (एसक्यूएल * प्लस ऐसा करेगा यदि आपके पास set trimout off
है। , या यदि स्पूलिंग set trimspool off
; जो कि बॉबसी का जिक्र हो सकता है), लेकिन यह वास्तव में मदद नहीं करता है यदि आप वास्तव में जो बनाने की कोशिश कर रहे हैं वह निश्चित लंबाई फ़ील्ड है , जो संचयी रूप से आपको एक निश्चित लंबाई का रिकॉर्ड भी देगा - और यदि आपके पास निश्चित लंबाई वाले फ़ील्ड नहीं हैं, तो वैसे भी डेटा की व्याख्या करना असंभव होगा।