কনক্যাট মাইএসকিউএল এর মধ্যে নাল মানগুলি কীভাবে বাদ দেবেন?


14

আমার যদি এটি থাকে - টেড হ'ল Addressটেবিল:

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

এটিপ-নাম্বারটি বিদ্যমান না থাকলে কি বাদ দেওয়ার কোনও উপায় আছে?

আমি চিন্তা ছিল:

WHERE tadd.apt_number IS NOT NULL

তবে এটি কেবল সেই সারিগুলিই ফিরিয়ে দেবে apt_number, এবং যদি কিছু কাজ করে তবে আমি কীভাবে সেই অতিরিক্ত কমাটি মোকাবিলা করব।

যদি এটির সদৃশ হয় তবে মন্তব্যে একটি লিঙ্ক পোস্ট করুন।

উত্তর:


18

আপনি যদি 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 বিভাজক যুক্তির পরে কোনও মান বাদ দেয় না।


8

রূপান্তর 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;

সমবেত হত্তয়া:

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'

আমি আমার স্ক্যুএলটি জানি না , তবে এমএস এসকিউএল (টিকিউএসএল) এ সমাধানটি দেখতে এরকম দেখাচ্ছে:

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'
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.