2013-11-02 9 views
7

में IIF का उपयोग कर varchar क्षेत्र को अद्यतन करने मैं अजीब परिणाम देखने के लिए जब इस क्वेरीव्हाइट रिक्त स्थान जब Firebird

update sd_invodt set line_type=iif(is_promo=1, 'campaign', 'item') 

को क्रियान्वित करने line_type फ़ील्ड में मान "item " हो जाएगा। मूल्य में सफेद जगहें हैं। लेकिन जब मैं इस क्वेरी निष्पादित

update sd_invodt set line_type='item' 

मैं सफेद रिक्त स्थान नहीं मिलता है।

अब मैं मैं नवीनतम का उपयोग Firebird 2.5 वैकल्पिक हल

update sd_invodt set line_type=trim(iif(is_promo=1, 'campaign', 'item')) 

के रूप में ट्रिम उपयोग करना होगा। Line_type एक वर्चर (15) है।

क्या यह बग फायरबर्ड में है?

संपादित

मैं नए डेटाबेस का उपयोग कर परीक्षण किया है, और समस्या बनी रहती है।

उत्तर

4

iif() का परिणाम प्रकार इनपुट पर निर्भर करता है और स्ट्रिंग के मामले में परिणाम प्रकार char(x) लगता है जहां x सबसे लंबी इनपुट स्ट्रिंग की लंबाई है। इस प्रकार "item" को "अभियान" के रूप में इसे तब तक बनाने के लिए 4 रिक्त स्थान के साथ गद्देदार किया जाएगा। मुझे लगता है कि यह डिज़ाइन द्वारा है लेकिन आप FB issuetracker पर टिकट दर्ज करना चाहेंगे।

तो पहले पैरामीटर के मामले में iif() वापसी "item " वापस लौटें और जब आप varchar फ़ील्ड पर रिक्त स्थान संग्रहीत करते हैं तो वे संरक्षित हैं।

+3

इसे एक बग नहीं माना जाता है, [कोर -4147] देखें (http://tracker.firebirdsql.org/browse/CORE-4147) –

संबंधित मुद्दे