আমি কীভাবে চেক করব যে কোনও এসকিএল সার্ভারের স্ট্রিং নাল বা খালি রয়েছে


225

আমি ডেটা যাচাই করতে চাই, তবে এটি নালাগুলি বা খালি থাকলে তা এড়িয়ে যান। বর্তমানে কোয়েরিটি নিম্নরূপ ...

Select              
Coalesce(listing.OfferText, company.OfferText, '') As Offer_Text,         
from tbl_directorylisting listing  
 Inner Join tbl_companymaster company            
  On listing.company_id= company.company_id      

তবে আমি company.OfferTexটি পেতে চাই যদি listing.Offertextখালি স্ট্রিং হয়, পাশাপাশি এটি শূন্য হয়।

সেরা পারফরম্যান্স সমাধান কি?

উত্তর:


433

আমি মনে করি এই:

SELECT 
  ISNULL(NULLIF(listing.Offer_Text, ''), company.Offer_Text) AS Offer_Text
FROM ...

সর্বাধিক মার্জিত সমাধান।

এবং এটি সিউডো কোডটিতে কিছুটা ভাঙতে:

// a) NULLIF:
if (listing.Offer_Text == '')
  temp := null;
else
  temp := listing.Offer_Text; // may now be null or non-null, but not ''
// b) ISNULL:
if (temp is null)
  result := true;
else
  result := false;

1
আপনার উত্তরটি বা চাচাফোফাকে উত্তর দেওয়া উচিত কিনা তা আমি সিদ্ধান্ত নিতে পারিনি, কারণ মনে হয় তিনি প্রথমে উত্তর দিয়েছেন তবে আপনি উত্তর দেওয়ার পরে তাঁর উত্তর সম্পাদনা করা হয়েছে ed আমি উভয় upvoting শেষ।
জেকসি

যদি তালিকাভুক্ত হয় ffঅফার_পেক্স = '', এটি NULLIF শর্তটি পাস করে। আমি দু: খিত
মেরিট

যতক্ষণ কোম্পানী.অফার_পেক্সটি নাল নয় তবে তারপরে এটি জিনিসগুলিকে জটিল করে তুলবে ... =)
কোপস

3
সবকিছু পরিকল্পনা মতো হয়েছে তা নিশ্চিত করার জন্য আমাদের ট্রিম ব্যবহার করা উচিত নয়
ইরফান্ডার

5
@irfandar - ঠিক আছে, আপনি যদি সমস্ত ফাঁকা জায়গায় একটি স্ট্রিং শূন্য হিসাবে বিবেচনা করতে চান তবে ট্রিম ব্যবহারের জন্য এগিয়ে যান। অন্যথায় সমস্ত স্পেস সহ একটি স্ট্রিং খালি নয়।
মার্টিন বা

53
SELECT
   CASE WHEN LEN(listing.OfferText) > 0 THEN listing.OfferText 
        ELSE COALESCE(Company.OfferText, '') END 
   AS Offer_Text,

... 

এই উদাহরণে, যদি listing.OfferTextনল হয় তবে লেন () ফাংশনটিরও নূলে ফিরে আসা উচিত, তবে এটি এখনও> 0 নয়।

হালনাগাদ

আমি এটিকে পোস্ট করার পরে 5 1/2 বছরে কিছু জিনিস শিখেছি এবং এখন এটি আরও ভিন্নভাবে করুন:

COALESCE(NULLIF(listing.OfferText,''), Company.OfferText, '')

এটি স্বীকৃত উত্তরের মতো, তবে এটির ক্ষেত্রেও ফ্যালব্যাক রয়েছে Company.OfferTextশূন্য। ব্যবহার করে অন্যান্য বর্তমান উত্তরগুলির কোনওটিও NULLIF()এটি করে না।


এটি আজ upvated হয়েছে, তাই এটি কোথাও সূচকযুক্ত। আমি এখন আসল উত্তরের চেয়ে আরও ভাল উপায় জানি।
জোয়েল কোহোর্ন 21


18

এখানে আরও একটি সমাধান:

SELECT Isnull(Nullif(listing.offertext, ''), company.offertext) AS offer_text, 
FROM   tbl_directorylisting listing 
       INNER JOIN tbl_companymaster company 
         ON listing.company_id = company.company_id

14

আপনি ISNULLউত্তরটি পরিচিত ফলাফলের বিরুদ্ধে ব্যবহার করতে এবং চেক করতে পারেন :

SELECT case when ISNULL(col1, '') = '' then '' else col1 END AS COL1 FROM TEST

12

এসকিউএল সার্ভারে আপনার 2012 রয়েছে IIF, যেমন আপনি এটি পছন্দ মতো ব্যবহার করতে পারেন

SELECT IIF(field IS NULL, 1, 0) AS IsNull

ক্ষেত্রটি খালি কিনা তা আপনি একইভাবে পরীক্ষা করতে পারেন।


6

নাল বা ফাঁকা মান পরীক্ষা করতে LEN ফাংশনটি ব্যবহার করুন। আপনি কেবল লেন (@ সোমবারচরপারম>) ব্যবহার করতে পারেন> ০ মানটি নুল, '' বা '' হলে এটি মিথ্যা ফিরে আসবে। কারণ LEN (NULL) NULL দেয় এবং NULL> 0 টি মিথ্যা দেয়। এছাড়াও, LEN ('') ০. ফেরায় নিজের জন্য দেখুন দেখুন:

SELECT 
 CASE WHEN NULL > 0 THEN 'NULL > 0 = true' ELSE 'NULL > 0 = false' END,
 CASE WHEN LEN(NULL) > 0 THEN 'LEN(NULL) = true' ELSE 'LEN(NULL) = false' END,
 CASE WHEN LEN('') > 0 THEN 'LEN('''') > 0 = true' ELSE 'LEN('''') > 0 = false' END,
 CASE WHEN LEN(' ') > 0 THEN 'LEN('' '') > 0 = true' ELSE 'LEN('' '') > 0 = false' END,
 CASE WHEN LEN(' test ') > 0 THEN 'LEN('' test '') > 0 = true' ELSE 'LEN('' test '') > 0 = false' END

যখন আপনি "... LEN (NULL) NULL এবং NULL> 0 টি মিথ্যা ..." ফেরত বলবেন তখন আসল নিয়মটি হ'ল NUL এর সাথে প্রতিটি পরীক্ষা বা তুলনা করে NULL ফেরত দেয়!
Didier68

ডান এটি লক্ষণীয় মূল্যহীন, তবে এটি একটি শর্টকাট হিসাবে কাজ করে কারণ তুলনাটি সঠিক বুলিয়ানতে নাল একত্রিত করে তোলে তাই এটি লেন (NULL) = 0 এর বিপরীতমুখী তুলনার জন্য কাজ করবে না যখন আমরা নাল বা ফাঁকা হয়ে সত্যটিতে ফিরে আসতে চাই ।
জ্যাচ জনসন

4
Select              
Coalesce(NullIf(listing.OfferText, ''), NullIf(company.OfferText, ''), '') As Offer_Text,         
from tbl_directorylisting listing  
 Inner Join tbl_companymaster company            
  On listing.company_id= company.company_id

প্রথম উত্তরের জন্য প্লাস ওয়ান (5 বছর পরে) উভয় ব্যবহার করতে NULLIF()এবং যদি শূন্য থাকে তবে একটি খালি স্ট্রিংয়ে একত্রিত হয় company.OfferText। যাইহোক, এখানে ২ য় NULLIF()কলটি কোনও উদ্দেশ্য করে না, যেমন একটি শূন্য স্ট্রিংকে মূল্য দেয় আপনি যেভাবেই খালি স্ট্রিংয়ে ফিরে যাচ্ছেন।
জোয়েল কোহোর্ন 21 '50

4

COALESCE এবং NULLIF এর এই সাধারণ সমন্বয়টি কৌশলটি করা উচিত:

SELECT             
  Coalesce(NULLIF(listing.OfferText, ''), company.OfferText) As Offer_Text
...

দ্রষ্টব্য: আপনি যদি বিবৃতিটি NUL এর পরিবর্তে খালি স্ট্রিংটি ফিরিয়ে আনতে চান তবে উভয় মান যদি NULL হয় তবে শেষ COALESCE আর্গুমেন্ট হিসাবে অন্য একটি খালি স্ট্রিং যুক্ত করুন।


4

আমি জানি এটি একটি পুরানো থ্রেড তবে আমি উপরের একটি আগের পোস্ট দেখেছি এবং এটি সঠিক নয়।

ক্ষেত্রটি নাল বা EMPTY কিনা তা নির্ধারণ করতে আপনি যদি LEN (...) ব্যবহার করে থাকেন তবে আপনার নিম্নরূপে এটি ব্যবহার করা দরকার:

...WHEN LEN(ISNULL(MyField, '')) < 1 THEN NewValue...

3

এখানে একটি সমাধান আছে, তবে আমি জানি না এটি সর্বোত্তম কিনা ...

Select              
Coalesce(Case When Len(listing.Offer_Text) = 0 Then Null Else listing.Offer_Text End, company.Offer_Text, '') As Offer_Text,         
from tbl_directorylisting listing  
 Inner Join tbl_companymaster company            
  On listing.company_id= company.company_id


3

এই বাক্য গঠন:

SELECT *
FROM tbl_directorylisting listing
WHERE (civilite_etudiant IS NULL)

মাইক্রোসফ্ট এসকিউএল সার্ভার ২০০৮ (এসপি 3) এ আমার জন্য কাজ করেছেন


2

Emptyবা এর সাথে রেকর্ডগুলি প্রতিরোধ করতেNullএসকিউএল ফলাফলের মানটি

আমরা কেবল যোগ করতে পারেন ..... WHERE Column_name != '' or 'null'


এটি কলটির প্রথম পোর্ট হবে তবে আপনি যদি কোনও টেবিলের একাধিক কলাম থেকে সংক্ষেপণের মতো কাজগুলি উদাহরণস্বরূপ করেন তবে এই কলামটির জন্য খালি প্রদর্শন করার চেয়ে সারিটি বাদ দেওয়া হবে
Coops


0

[কলাম_নাম]> '' নালস এবং খালি স্ট্রিংগুলি বাদ দেয়। একক উদ্ধৃতিগুলির মধ্যে একটি স্থান রয়েছে।


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