এসকিউএল সার্ভারে ধ্রুব 1 বা 0 দিয়ে বিট প্রয়োগ করুন


154

একটি নির্বাচিত বিবৃতিতে ক্ষেত্রের মান হিসাবে ব্যবহার করা গেলে কি 1 বা 0 টি কিছুটা প্রকাশ করা সম্ভব?

যেমন

এই ক্ষেত্রে স্টেটমেন্ট (যা একটি নির্বাচিত বিবৃতি অংশ) আইকোর্সবেসড টাইপ int হয়।

case 
when FC.CourseId is not null then 1
else 0
end
as IsCoursedBased

এটি কিছুটা টাইপ হওয়ার জন্য আমাকে উভয় মানই কাস্ট করতে হবে।

case 
when FC.CourseId is not null then cast(1 as bit)
else cast(0 as bit)
end
as IsCoursedBased

বিট টাইপ হিসাবে প্রতিবার কাস্ট না করে মানগুলি প্রকাশ করার কোনও ছোট্ট উপায় আছে?

(আমি এমএস এসকিউএল সার্ভার 2005 ব্যবহার করছি)

উত্তর:


226
cast (
  case
    when FC.CourseId is not null then 1 else 0
  end
as bit)

CAST স্পেসটি হ'ল "CAST (এক্সপ্রেশন AS টাইপ)"। সিএসই এই প্রসঙ্গে একটি অভিব্যক্তি

আপনার যদি এরকম একাধিক অভিব্যক্তি থাকে তবে আমি বিট ওয়ারগুলি @ ট্র্রু এবং @ ফ্যালস ঘোষণা করব এবং সেগুলি ব্যবহার করব। বা ইউডিএফ ব্যবহার করুন যদি আপনি সত্যিই চান ...

DECLARE @True bit, @False bit;
SELECT @True = 1, @False = 0;  --can be combined with declare in SQL 2008

SELECT
    case when FC.CourseId is not null then @True ELSE @False END AS ...

1
একটি নিট, 5 লাইনে "অন্য 0" হওয়া উচিত
শ্যানন সিভেরেন্স

1
কোডটি আরও পঠনযোগ্য করার জন্য আমরা আমাদের এসকিউএলকে প্রমিত করেছি এবং এখন সত্য / মিথ্যা প্রকাশ করার প্রয়োজন হলে আমরা ঘোষিত বিট ভেরিয়েবলগুলি ব্যবহার করি।
ড্যামিয়েন ম্যাকগাইভার

@ ড্যামিয়েন ম্যাকগাইভার: আমি যখন খুব বেশি CASTs পেয়েছিলাম তখনও এটি দরকারী হয়েছিল
gbn

10

আপনি আইকোর্স ভিত্তিতে একটি দৃশ্যে ফিল্ড সংজ্ঞা হিসাবে দ্বিতীয় স্নিপেট যুক্ত করতে পারেন।

DECLARE VIEW MyView
AS
  SELECT
  case 
  when FC.CourseId is not null then cast(1 as bit)
  else cast(0 as bit)
  end
  as IsCoursedBased
  ...

SELECT ICourseBased FROM MyView

এটি কাজ করে, তবে কাস্ট () কমেছে এমন কোনও নুআল টাইপ দেয়।
ড্যান

6

না, তবে আপনি এই অভিব্যক্তিটির উপ-উপাদানগুলির চেয়ে পুরো অভিব্যক্তিটি ফেলে দিতে পারেন। আসলে, এটি সম্ভবত এটি এ ক্ষেত্রে কম পাঠযোগ্য করে তোলে ।


4

জিবিএন এর চেয়ে সামান্য বেশি ঘনীভূত:

ধরে CourseIdনেওয়া শূন্য নয়

CAST (COALESCE(FC.CourseId, 0) AS Bit)

COALESCE একটি মত ISNULL() , তবে প্রথম নন-নুলকে ফেরত দেয়।

একটি নন-জিরো CourseIdএকটি 1-তে টাইপ-কাস্ট পাবেন, যখন একটি CourseIdশূন্যপদ COALESCE এর পরবর্তী মান 0 হিসাবে প্রেরণ করবে




0

নির্বাচনের অভ্যন্তরে ব্যবহারের জন্য এক্সপ্রেশন হতে পারে

CAST(IIF(FC.CourseId IS NOT NULL, 1, 0) AS BIT)

এই উত্তরটি আরও কার্যকর করুন এবং ব্যাখ্যা করুন বা লাইব্রেরি / ডক্সের লিঙ্কগুলি সরবরাহ করুন
হ্যাপি ম্যাকার্ডস

হ্যালো, এবং তাই আপনাকে স্বাগতম। আপনার উত্তর ব্যাখ্যা করুন।
চ্যাট

যদিও IIF বেশী ভালো দেখায় case when ... else ... end, এক এখনও ঢালাই হয়েছে 1এবং 0বিআইটি টাইপ।
ফ্যাবিও এ।

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