মাইএসকিউএল কনক্যাট যদি NUL থাকে তবে কোনও ক্ষেত্র NULL প্রদান করে


163

আমার টেবিলে "ডিভাইসগুলিতে" নিম্নলিখিত ডেটা রয়েছে

affiliate_name  affiliate_location  model     ip             os_type    os_version 

cs1             inter               Dell     10.125.103.25   Linux      Fedora  
cs2             inter               Dell     10.125.103.26   Linux      Fedora  
cs3             inter               Dell     10.125.103.27   NULL       NULL    
cs4             inter               Dell     10.125.103.28   NULL       NULL    

আমি কোয়েরির নিচে মৃত্যুদন্ড কার্যকর করেছি

SELECT CONCAT(`affiliate_name`,'-',`model`,'-',`ip`,'-',`os_type`,'-',`os_version`) AS device_name
FROM devices

এটি নীচে দেওয়া ফলাফল দেয়

cs1-Dell-10.125.103.25-Linux-Fedora
cs2-Dell-10.125.103.26-Linux-Fedora
(NULL)
(NULL)

কীভাবে এটি থেকে বেরিয়ে আসবে যাতে এটি নাল উপেক্ষা করে এবং ফলাফল হওয়া উচিত

cs1-Dell-10.125.103.25-Linux-Fedora
cs2-Dell-10.125.103.26-Linux-Fedora
cs3-Dell-10.125.103.27-
cs4-Dell-10.125.103.28-

উত্তর:


279

NULLএটিকে মোড়ানো করে খালি স্ট্রিং দিয়ে মানগুলি রূপান্তর করুনCOALESCE

SELECT CONCAT(COALESCE(`affiliate_name`,''),'-',COALESCE(`model`,''),'-',COALESCE(`ip`,''),'-',COALESCE(`os_type`,''),'-',COALESCE(`os_version`,'')) AS device_name
FROM devices

1
আপনি যদি কনক্যাট (যদি (অনুমোদিত নামটি নাল, '', অনুমোদিত)), '-', যদি (মডেলটি নাল হয়, '', অনুমোদিত_নাম)) ডিভাইস থেকে মডেল হিসাবে নির্বাচন করেন তবে আপনি ব্যবহার করতে পারেন
দিনেশ রাবারা

6
এই বিস্ময়ের জন্য, আমি যেমনটি করেছি, COALESCEফাংশনটি কী করে: এটি এতে প্রথম NULLপাস করা অ- মান পরামিতি ফেরত দেয় (বা NULLযদি সমস্ত পরামিতি হয় NULL)। দ্বিতীয় প্যারামিটার হিসাবে খালি স্ট্রিংটি পাস করে আপনি গ্যারান্টি দিচ্ছেন এটি আর ফিরে আসবে না NULL
জো।

3
মাইএসকিএলে একই সিনট্যাক্সের পরিবর্তে আইএফএনএলএল (আরগ, ডিফল্ট) রয়েছে
ভ্যাসিলি সুরিকভ

126

ব্যবহারের CONCAT_WS পরিবর্তে:

CONCAT_WS () খালি স্ট্রিং এড়ায় না। যাইহোক, এটি বিভাজক যুক্তির পরে কোনও NULL মান বাদ দেয় না।

SELECT CONCAT_WS('-',`affiliate_name`,`model`,`ip`,`os_type`,`os_version`) AS device_name FROM devices

দুঃখিত নীরেজ আমি কনক্যাট এবং ডাব্লুএস এর মধ্যে '_' মিস করেছি দয়া করে CONCAT_WS () দিয়ে আবার চেষ্টা করুন আমি উত্তরটি আপডেট করেছি দয়া করে পরীক্ষা করে দেখুন,
গুরুমিত

8
মনে রাখবেন যে সমাধানটি একটি সম্পূর্ণ "কলাম" লুকিয়ে রাখে (বিভাজক সহ) যদি মাঝের ক্ষেত্রগুলির কোনও একটি NULL হয়। সুতরাং এই উত্তরটি কেবলমাত্র ধরে নেওয়া সঠিক যে কেবলমাত্র শেষের ক্ষেত্রগুলি NUL হতে পারে। আপনার প্রয়োজনের উপর নির্ভর করে নীচে কুলেস () উত্তরটি আরও ভাল হতে পারে।
জেনেস

এটি কেবলমাত্র যদি আপনি প্রতিটি সদস্যকে একই বিভাজক দ্বারা পৃথক করতে চান তবে এটি কাজ করে। কনক্যাট এর এই সীমাবদ্ধতা নেই। আমি এখানে উত্তর হিসাবে সমাধান পোস্ট করেছি
প্যাট্রিক

12

কনক্যাট-এর মতো CONCAT_WS তে একই নমনীয়তা পেতে (উদাহরণস্বরূপ আপনি যদি প্রতিটি সদস্যের মধ্যে একই বিভাজক না চান) নিম্নলিখিত ব্যবহার করুন:

SELECT CONCAT_WS("",affiliate_name,':',model,'-',ip,... etc)

11
SELECT CONCAT(isnull(`affiliate_name`,''),'-',isnull(`model`,''),'-',isnull(`ip`,''),'-',isnull(`os_type`,''),'-',isnull(`os_version`,'')) AS device_name
FROM devices

15
আইএসএনএলএল () এর পরিবর্তে মাইএসকিএলে IFNULL ()
জেফ্রি নিকলসন

10

CONCAT_WSপ্রথম ক্ষেত্রটি নাল হলে এখনও আমার পক্ষে নাল সৃষ্টি করে। আমি শুরু হিসাবে শূন্য দৈর্ঘ্যের স্ট্রিংটি এটিকে যুক্ত করে সমাধান করেছি

CONCAT_WS("",`affiliate_name`,'-',`model`,'-',`ip`,'-',`os_type`,'-',`os_version`)

যাহোক

CONCAT("",`affiliate_name`,'-',`model`,'-',`ip`,'-',`os_type`,'-',`os_version`) 

নীল উত্পাদন করে যখন প্রথম ক্ষেত্র নাল হয়।


স্পষ্টতই, কারণ প্রথম ক্ষেত্রটি সেই স্ট্রিং যা এটি সংযুক্ত করবে (ডাব্লুএস = স্ট্রিং সহ)
বুক ভার্স্টিঘ

2
CONCAT_WS বিভাজক বিভাজক জন্য সংক্ষিপ্ত। প্রথম প্যারামিটারটি বিভাজক এবং শূন্য হতে পারে না। এর পরিবর্তে সম্ভবত আপনি যা চান এটি সম্ভবত:CONCAT_WS("-", affiliate_name, model, ip, os_type, os_version)
টানুন

2

নীচের মত বিবৃতি যদি আপনি ব্যবহার করতে পারেন

select CONCAT(if(affiliate_name is null ,'',affiliate_name),'- ',if(model is null ,'',affiliate_name)) as model from devices
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.