SQL सर्वर में लगातार 1 या 0 के साथ थोड़ा सा


154

क्या 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

क्या हर बार कास्ट किए बिना मानों को बिट प्रकार के रूप में व्यक्त करने का एक छोटा तरीका है?

(मैं एमएस SQL ​​सर्वर 2005 का उपयोग कर रहा हूं)

जवाबों:


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

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

यदि आपके पास ऐसे कई भाव हैं, तो मैं बिट vars @true और @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 ...

1
एक नाइट, लाइन 5 पर "और 0" होना चाहिए
शैनन सेवरेंस

1
कोड को अधिक पठनीय बनाने के लिए हमने अपने SQL को मानकीकृत किया और अब घोषित बिट चर का उपयोग करते हैं जब हमें सही / गलत को व्यक्त करने की आवश्यकता होती है।
डेमियन मैकगिवर्न

@ डैमियन मैकगिवर्न: मुझे यह तब भी उपयोगी लगा जब मेरे पास कई CASTs थे
gbn

10

आप एक दृश्य में 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

यह काम करता है, लेकिन नकारात्मक पक्ष यह है कि डाली () एक पूर्ण प्रकार देता है।
दान

6

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


4

Gbn की तुलना में थोड़ा अधिक संघनित:

मान CourseIdलेना गैर-शून्य है

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

COALESCEएक की तरह है ISNULL(), लेकिन पहला गैर-अशक्त लौटाता है।

एक गैर-शून्य CourseIdको टाइप-कास्ट मिलेगा 1, जबकि एक अशक्त CourseIdअगले मूल्य को वापस करने के लिए COALESCE का कारण होगा: 0


4

यदि आप चाहते हैं कि स्तंभ BIT और NOT NULL है, तो आपको CAST से पहले ISNULL डालना चाहिए।

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

1

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


0

SELECT के अंदर उपयोग करने की अभिव्यक्ति हो सकती है

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

इस उत्तर को अधिक उपयोगी बनाएं और लाइब्रेरी / डॉक्स के लिंक उपलब्ध कराएं या प्रदान करें
happyymacarts

नमस्ते, और एसओ में आपका स्वागत है। कृपया अपना उत्तर बताएं।
चैत

हालांकि आईआईएफ की तुलना में बेहतर दिखता है case when ... else ... end, एक अभी भी 1और 0बीआईटी प्रकार के लिए डाली है ।
फैबियो ए।

-1

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

SELECT ...,
  IsCoursedBased = CAST(
      CASE WHEN fc.CourseId is not null THEN 1 ELSE 0 END
    AS BIT
  )
FROM fc
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.