2009-06-23 10 views
53

मेरे पास तीन फ़ील्ड, फर्स्टनाम, लास्टनाम और ईमेल वाला एक टेबल है। , जो के लिएCONCAT'ing नल फ़ील्ड

SELECT CONCAT(FirstName, LastName, Email) as Vitals FROM MEMBERS 

नब्ज रिक्त है के रूप में वहाँ एक भी अशक्त क्षेत्र है:

FirstName | LastName | Email 
Adam  West  [email protected] 
Joe   Schmoe  NULL 

अब अगर मैं कार्य करें:

यहाँ कुछ डमी डेटा है। आप इस व्यवहार को कैसे दूर करते हैं? साथ ही, यह एमएस एसक्यूएल सर्वर में डिफ़ॉल्ट व्यवहार है?

उत्तर

111

ISNULL(FirstName, '<BlankValue>') -- In SQL Server 
IFNULL(Firstname, '<BlankValue>') -- In MySQL 

तो,

CONCAT(ISNULL(FirstName,''),ISNULL(LastName,''),ISNULL(Email,'')) -- In SQL Server 
CONCAT(IFNULL(FirstName,''),IFNULL(LastName,''),IFNULL(Email,'')) -- In MySQL 

अशक्त मुद्दा (और एक खाली स्ट्रिंग जहां nulls होना चाहिए) के बिना एक ही बात वापस होगा की कोशिश करो।

+0

बहुत बढ़िया बिना concat उपयोग करने के लिए काफी है, धन्यवाद! –

+9

देखें [BILBO उत्तर] (http://stackoverflow.com/a/5792720/532060) के बारे में [CONCAT_WS] (http://dev.mysql.com/doc/refman/5.0/en/string-functions.html# function_concat-ws), मेरी राय – dvb

+3

में एक बेहतर समाधान यह MySQL डेटाबेस के साथ काम नहीं करता है ... CONCAT_WS() एक अधिक सामान्य समाधान प्रतीत होता है। – ricosrealm

3

स्टीफन का जवाब सही है। थोड़ा गहरा जांच करने के लिए आपको यह जानना होगा कि न्यूल कुछ भी नहीं है। नल एक मूल्य की अनुपस्थिति का प्रतिनिधित्व करता है, या दूसरे शब्दों में, परिभाषित नहीं किया गया है। कुछ भी एक खाली स्ट्रिंग का प्रतिनिधित्व नहीं करता है जो वास्तव में एक मूल्य है।

अपरिभाषित + कुछ भी = अपरिभाषित

अच्छा डेटाबेस से tidbit पर धारण करने के लिए!

2

SQL सर्वर में CONCAT फ़ंक्शन नहीं है।
(अद्यतन: एमएस एसक्यूएल सर्वर 2012 से शुरू it was introduced CONCAT function)

डिफ़ॉल्ट SQL सर्वर व्यवहार में, एनयूएलएल अभिव्यक्ति के माध्यम से प्रचारित करता है।

एसक्यूएल सर्वर में, एक ने लिखा है:

SELECT FirstName + LastName + Email as Vitals FROM MEMBERS 

आप NULL रों संभाल करने की जरूरत है:

SELECT ISNULL(FirstName, '') + ISNULL(LastName, '') + ISNULL(Email, '') as Vitals FROM MEMBERS 
5
SELECT ISNULL(FirstName,'')+ISNULL(LastName,'')+ISNULL(Email,'') as Vitals FROM MEMBERS 

की सिफारिश की है, लेकिन तुम सच पर concat, रैप झुका कर रहे हैं यह {fn} में है और आप ओडीबीसी फ़ंक्शन का उपयोग कर सकते हैं जैसे:

SELECT {fn CONCAT(ISNULL(FirstName,''), ISNULL(LastName,''), ISNULL(Email,''))} as Vitals FROM MEMBERS 

आप पहली बार < स्थान की आवश्यकता है > पिछले लेकिन अभी पिछले जब पहली रिक्त है आप यह कर सकते हैं:

ISNULL(FirstName+' ','') + ISNULL(LastName,'') 

मैं firstname पर अंतरिक्ष जो अशक्त हो सकता है जोड़ा - कि अंतरिक्ष केवल तभी बच जाएगा मतलब होगा फर्स्टनाम का मूल्य था।

उन सब को प्रत्येक के बीच एक स्थान के साथ एक साथ रखा करने के लिए:

RTRIM(ISNULL(Firstname+' ','') + ISNULL(LastName+' ','') + ISNULL(Email,'')) 
+0

फर्स्टनाम पर स्थान गैर-शून्य को नहीं बनाएगा? –

+1

संख्या न्यूल + कुछ भी शून्य है। – Hafthor

5

तुम हमेशा CONCAT_NULL_YIELDS_NULL सेटिंग का उपयोग कर सकते हैं ..

सिर्फ SET CONCAT_NULL_YIELDS_NULL OFF चलाने के लिए और उसके बाद सभी null concatenations पाठ में और नहीं अशक्त परिणाम होगा ..

12

MySQL में अभ्यस्त कुछ समय काम IsNull। IFNULL() की कोशिश,

CONCAT(IFNULL(FirstName,''),IFNULL(LastName,''),IFNULL(Email,'')) 
67

CONCAT_WS

पर देखो उदाहरण के लिए:

CONCAT_WS('',NULL,"TEST STRING","TEST STRING 2") 

पैदावार

TEST STRINGTEST STRING 2

यह सब कुछ चारों ओर IFNULL निर्माण की तुलना में आसान है। आप विभाजक के रूप में एक खाली स्ट्रिंग का उपयोग कर सकते हैं।

+5

[CONCAT_WS दस्तावेज़ीकरण] (http://dev.mysql.com/doc/refman/5.0/en/string-functions.html#function_concat-ws) – dvb

+0

इसे MySQL में उपयोग करते हुए, एमएस एसक्यूएल सर्वर के बारे में पता नहीं – sldev

3

तो आपको मिल (जैसे मैं MySQL में करते हैं):

#1582 - Incorrect parameter count in the call to native function 'ISNULL' 

आप COALESCE द्वारा IsNull समारोह जगह ले सकता है: एमएस एक्सेस के मामले में

CONCAT(COALESCE(FirstName,''),COALESCE(LastName,''),COALESCE(Email,'')) 
1

विकल्प 1) सदस्य (फर्स्टनाम + "" + लास्टनाम + "" + ईमेल) सदस्यों से राजधानियों के रूप में आपको शून्य के साथ किसी भी क्षेत्र के मामले में रिक्त परिणाम मिलेगा।

विकल्प 2) का चयन करें (प्रथम & "" & अंतिम नाम & "" & ईमेल) के सदस्यों से नब्ज के रूप में आप शून्य वाले क्षेत्र के स्थान पर अंतरिक्ष मिल जाएगा।

0

इस सवाल के जवाब देखने के बाद, आप एक सरल उपाय

CONCAT_WS(',', 
IF(NULLIF(FirstName, '') IS NULL, NULL, FirstName), 
IF(NULLIF(LastName, '') IS NULL, NULL, usr_lastname), 
IF(NULLIF(Email, '') IS NULL, NULL, Email)) 

तो में उन सभी को सम्मिलित कर सकते हैं, संक्षेप में हम CONCAT_WS का उपयोग हमारे क्षेत्रों को श्रेणीबद्ध करने और उन्हें , साथ अलग करने के लिए; और देखा कि NULL क्षेत्रों और न ही EMPTY अभ्यस्त concatenated

NULLIF यदि क्षेत्र NULL या EMPTY है की जाँच करेगा, एक क्षेत्र है कि केवल रिक्त स्थान शामिल है या रूप में अच्छी तरह खाली है, उदा: '', '') और उत्पादन होगा या तो NULL या NOT NULL

बाहर क्षेत्र डाल देंगे अगर अगर यह NULL या EMPTY

1

एमएस एसक्यूएल सर्वर 2012 को यह concat पेश किया गया था से शुरू नहीं है समारोह और according to MSDN

अशक्त मूल्यों परोक्ष रिक्त स्ट्रिंग पर बदल रहे हैं। यदि सभी तर्क शून्य हैं, तो प्रकार वर्कर (1) की एक खाली स्ट्रिंग लौटा दी जाती है।

तो यह IsNull

CONCAT(FirstName, LastName, Email) 
संबंधित मुद्दे