2015-08-09 12 views
5

मैं Access में निम्नलिखित एसक्यूएल क्वेरी है:अशक्त में + परिणामों का उपयोग स्ट्रिंग के लिए अशक्त श्रृंखलाबद्ध

SELECT ID, CurrencyName + ' (' + CurrencySymbol + ')' AS [Currency], 
CurrencyLocation, CurrencySymbol FROM Currencies ORDER BY SortOrder 

क्या मैंने देखा है कि मैं सिवाय क्षेत्र CurrencySymbolNULL छोड़ दिया है, तो अगर या परिणामों की पूरी तालिका मिलता है खाली। यदि CurrencySymbol फ़ील्ड शून्य नहीं है, तो कुछ भी नहीं है, रिकॉर्ड पर एक्सेस स्किप और

Snapshot of Access से नीचे दिखाया गया है।

क्या मुझे कुछ गलत मिला या क्या इस प्रश्न को लिखने का एक बेहतर तरीका है?

+1

कॉन्सटेनेशन ऑपरेटर के रूप में '+' के बजाय '&' का उपयोग करने का प्रयास करें। जब नल की बात आती है तो वे अलग-अलग व्यवहार करते हैं। आप 'प्रारूप()' फ़ंक्शन पर भी नज़र डालना चाहेंगे। –

उत्तर

4

आप + साथ तार जोड़, string + NULL पैदावार NULL हैं।

यदि आप &, string & NULL के साथ तारों को जोड़ते हैं तो string उत्पन्न होता है।

विकल्प 1:: CurrencyName + ' (' + Nz(CurrencySymbol, '') + ')'

इस प्रकार, आपके पास दो विकल्प इसे ठीक करने के लिए है। Nz (NullToZero) शून्य मानों को इसके दूसरे तर्क में परिवर्तित करता है।

विकल्प 2: CurrencyName & ' (' & CurrencySymbol & ')'

आप जब एक मुद्रा प्रतीक मौजूद है एक अभिव्यक्ति है कि केवल कोष्ठक से पता चलता बनाने के लिए इस तथ्य का उपयोग कर सकते हैं (इस विचार के लिए क्रेडिट this blog post को जाता है):

CurrencyName & (' (' + CurrencySymbol + ')')Points निकलेगा और Euro (€)

+0

ओह मैंने सोचा कि Concatenate केवल '+' के साथ काम करता है, मुझे नहीं पता था 'और' –

+2

'विकल्प था और 'एक स्पष्ट * स्ट्रिंग * concatenation ऑपरेटर है। तो, '3 + 4' उपज' 7', लेकिन '3 और 4' उपज' 34 "'। – Heinzi

3

ऐसा इसलिए है क्योंकि एक स्ट्रिंग और न्यूल परिणामों को न्यूल में जोड़ना।

SELECT ID, CurrencyName + ' (' + Iif(IsNull(CurrencySymbol), '', CurrencySymbol) + ')' 
    AS [Currency], CurrencyLocation, CurrencySymbol 
FROM Currencies 
ORDER BY SortOrder 
+0

थोड़ा संशोधन के साथ मुझे ठीक लगता है कि मैं इसे पहली बार प्रारूपित करने की उम्मीद कर रहा था। धन्यवाद! –

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