CONCAT MySQL के अंदर NULL मान कैसे छोड़ें?


15

अगर मेरे पास यह है - टैड Addressटेबल है:

CONCAT(tadd.street_number, ' ',
            tadd.street_name,', ',
            tadd.apt_number,', ',
            tadd.city,', ',
            tadd.postal_code,', ',
            tadd.country) AS 'Address'

अगर यह मौजूद नहीं है तो apt_number को बाहर करने का कोई तरीका है?

मैं सोच रहा था:

WHERE tadd.apt_number IS NOT NULL

लेकिन यह केवल उन पंक्तियों के साथ वापस आ जाएगा apt_number, और यहां तक ​​कि अगर कुछ काम करता है तो मैं उस अतिरिक्त अल्पविराम से कैसे निपटूं।

यदि यह डुप्लिकेट है तो कृपया टिप्पणियों में एक लिंक पोस्ट करें।

जवाबों:


19

यदि आप NULLमान छोड़ना चाहते हैं (लेकिन खाली स्ट्रिंग नहीं), तो आप CONCAT_WS()फ़ंक्शन का उपयोग कर सकते हैं :

CONCAT_WS( ', ',            -- Separator
           CONCAT_WS(' ', tadd.street_number, tadd.street_name),
           tadd.apt_number,  tadd.city, 
           tadd.postal_code, tadd.country
         ) AS Address

डॉक्स से:

CONCAT_WS(separator,str1,str2,...)

CONCAT_WS()कॉन्टेनेटनेट विद सेपरेटर का एक विशेष रूप है CONCAT()। बाकी तर्कों के लिए पहला तर्क विभाजक है। विभाजक को जोड़ने के लिए तार के बीच जोड़ा जाता है। विभाजक एक स्ट्रिंग हो सकता है, जैसा कि बाकी तर्कों में हो सकता है। यदि विभाजक है NULL, तो परिणाम है NULL

CONCAT_WS()खाली स्ट्रिंग्स को न छोड़ें। हालाँकि, यहNULL विभाजक तर्क के बाद किसी भी मान को छोड़ता है।


9

NULLखाली स्ट्रिंग में मानों को इसमें लपेटकर COALESCEया परिवर्तित करें IFNULL:

IFNULL:

SELECT
    CONCAT(IFNULL(tadd.street_number,''),
        ' ',IFNULL(tadd.street_name,''),
        ', ',IFNULL(tadd.apt_number,''),
        ', ',IFNULL(tadd.city,''),
        ', ',IFNULL(tadd.postal_code,''),
        ', ',IFNULL(tadd.country,'')) AS 'Address'
FROM db.tbl;

COALESCE:

SELECT
    CONCAT(COALESCE(tadd.street_number,''), 
        ' ',COALESCE(tadd.street_name,''),
        ', ',COALESCE(tadd.apt_number,''),
        ', ',COALESCE(tadd.city,''),
        ', ',COALESCE(tadd.postal_code,''),
        ', ',COALESCE(tadd.country,'')) AS 'Address'
FROM db.tbl

3
CONCAT(
    tadd.street_number, ' ', tadd.street_name, ', ',
-- concat() will return null if one is null, so ifnull returns empty string in that case
    IFNULL(CONCAT(tadd.apt_number, ', '), ''),
    tadd.city, ', ', tadd.postal_code, ', ',tadd.country
) AS 'Address'

1
CONCAT_WS('',         -- hack, empty delimiter
        tadd.street_number, ' ',
        tadd.street_name,', ',
        CONCAT(tadd.apt_number,', '), -- hack, this line will become NULL, when apt_number is null, and will be omitted with delimiter
        tadd.city,', ',
        tadd.postal_code,', ',
        tadd.country) AS 'Address'

मैं अपने sql को नहीं जानता , लेकिन MS SQL (TQSL) में समाधान जैसा दिखता है:

SELECT
        tadd.street_number + ' ' +
        tadd.street_name + ', ' +
        ISNULL(tadd.apt_number  + ', ', '') +
        tadd.city + ', ' +
        tadd.postal_code + ', ' +
        tadd.country AS 'Address'

इसके अलावा, आप सभी NULLक्षेत्रों को छोड़ सकते हैं , न कि केवल apt_number (mysql फिर से):

SELECT CONCAT_WS(', ',
        CONCAT(tadd.street_number, ' ', tadd.street_name),
        tadd.apt_number,
        tadd.city,
        tadd.postal_code,
        tadd.country) AS 'Address'
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.