SQL सर्वर में निरंतर 1 या 0 के साथ बस थोड़ा सा




sql-server tsql (7)

क्या किसी चयनित कथन में फ़ील्ड मान के रूप में उपयोग किए जाने पर थोड़ा सा 1 या 0 व्यक्त करना संभव है?

जैसे

इस मामले में कथन (जो एक चुनिंदा बयान का हिस्सा है) ICourseBased प्रकार 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 का उपयोग कर रहा हूँ)


यदि आप चाहते हैं कि कॉलम बीआईटी है और न्यूल नहीं है, तो आपको CAST से पहले ISNULL रखना चाहिए।

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

इसका आनंद लें :) व्यक्तिगत रूप से प्रत्येक मूल्य कास्ट किए बिना।

SELECT ...,
  IsCoursedBased = CAST(
      CASE WHEN fc.CourseId is not null THEN 1 ELSE 0 END
    AS BIT
  )
FROM fc

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

CAST spec "CAST (अभिव्यक्ति एएस प्रकार)" है। CASE इस संदर्भ में एक अभिव्यक्ति है।

यदि आपके पास ऐसे कई अभिव्यक्तियां हैं, तो मैं थोड़ा vars @true और @false घोषित करता हूं और उनका उपयोग करता हूं। या यदि आप वास्तव में चाहते थे तो यूडीएफ का उपयोग करें ...

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, 0)


आप दृश्य में ICourseBased के लिए फ़ील्ड परिभाषा के रूप में दूसरा स्निपेट जोड़ सकते हैं।

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

नहीं, लेकिन आप उस अभिव्यक्ति के उप-घटकों की बजाय पूरी अभिव्यक्ति डाल सकते हैं। असल में, यह शायद इस मामले में इसे कम पठनीय बनाता है।


दुर्भाग्यवश नहीं। आपको प्रत्येक मूल्य को व्यक्तिगत रूप से डालना होगा।





bit