سؤال

هل من الممكن التعبير عن 1 أو 0 كما بتستخدم كقيمة حقل في عبارة مختارة؟

على سبيل المثال

في هذه الحالة الحالة (التي هي جزء من عبارة مختارة) icoursebased هي من النوع الدولي.

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

هل هناك طريقة قصيرة لليد للتعبير عن القيم مثل نوع البت دون الحاجة إلى الإدلاء في كل مرة؟

(أنا أستخدم MS SQL Server 2005)

هل كانت مفيدة؟

المحلول

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

المواصفات المصبوب هو "يلقي (التعبير بالنوع)". القضية هي التعبير في هذا السياق.

إذا كان لديك العديد من التعبيرات، فسأعلن Bit VarsTrue و False واستخدامها. أو استخدم UDFS إذا كنت ترغب حقا ...

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 ...

نصائح أخرى

قد تضيف المقتطف الثاني كتعريف حقل ل cheverbased في طريقة عرض.

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

لا، ولكن يمكنك إلقاء التعبير بأكمله بدلا من المكونات الفرعية لهذا التعبير. في الواقع، ربما يجعلها أقل مقروءة في هذه الحالة.

أكثر تحثا قليلا من GBN:

افترض CourseId غير صفر

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

COALESCE هو مثل an. ISNULL(), ، ولكن إرجاع أول غير فارغة.

غير صفر CourseId سوف تحصل على نوع من نوع إلى 1، في حين أن null CourseId سوف يسبب الاهتمام في إعادة القيمة التالية، 0

إذا كنت تريد أن يكون العمود قليلا وليس فارغا، فيجب أن تضع ISNULL قبل المصبوب.

ISNULL(
   CAST (
      CASE
         WHEN FC.CourseId IS NOT NULL THEN 1 ELSE 0
      END
    AS BIT)
,0) AS IsCoursedBased

للاسف لا. سوف تضطر إلى إلقاء كل قيمة على حدة.

التعبير لاستخدام الداخل المحددة يمكن أن يكون

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

استمتع بهذا :) دون أن يلقي كل قيمة على حدة.

SELECT ...,
  IsCoursedBased = CAST(
      CASE WHEN fc.CourseId is not null THEN 1 ELSE 0 END
    AS BIT
  )
FROM fc
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top