2010-06-28 14 views
12

कल्पना कीजिए मैं एक दृश्य (एसक्यूएल सर्वर 2008) में निम्न SELECT कथन है:एसक्यूएल सर्वर में स्तंभ उर्फ ​​साथ डेटा प्रकार निर्दिष्ट 2008

SELECT (SELECT CASE 
       WHEN HISTORY.OUTOFSERV = 'Y' OR HISTORY.OUTOFSERV = 'y' THEN 1 
       ELSE 0 
       END) AS OOS 
    FROM HISTORY 

स्तंभ ओओएस प्रकार int की जा रही समाप्त होता है, लेकिन मैं था जैसे कि यह बिट बिट होना चाहिए। मैं यह कैसे हासिल कर सकता हूं?

उत्तर

24

उपयोग CAST/CONVERT स्पष्ट रूप से डेटा प्रकार परिभाषित करने के लिए:

SELECT CAST (CASE 
       WHEN LOWER(h.outofserv) = 'y' THEN 1 
       ELSE 0 
      END AS BIT) AS OOS 
FROM HISTORY h 
+1

बिल्कुल सही! धन्यवाद। –

4

तुम सिर्फ CAST(1 as bit) और CAST(0 as bit) के बजाय 1 और 0 का उपयोग करना चाहिए:

SELECT (CASE WHEN HISTORY.OUTOFSERV = 'Y' OR HISTORY.OUTOFSERV = 'y' 
      THEN CAST(1 AS bit) 
      ELSE CAST(0 AS bit) 
     END) AS OOS 
FROM HISTORY 
+0

यह मेरे उपयोग के मामले के लिए सबसे अच्छा समाधान था, धन्यवाद। – Yass

+0

@Yass: आपका स्वागत है! 'ऊपरी' बिट के लिए – Oleg

2

यहाँ एक तरह से वांछित बीआईटी डेटाप्रकार उत्पादन प्राप्त करने के लिए है , और थोड़ा क्लीनर कोड का उपयोग कर:

  • ऊपरी()
  • डाली()

    चयन कास्ट (मामला
    जब ऊपरी (History.OutofServ) = 'वाई' तो 1
    वरना 0 अंत बिट) ओओएस के रूप में इतिहास

    से

मुझे उम्मीद है कि मदद करता है।

+0

+1 – Earlz

संबंधित मुद्दे