2010-03-16 18 views
25

मेरे स्रोत तालिका की तरह दिखता है इसकेस स्टेटमेंट में शून्य तिथि की जांच करें, मैं गलत कहां गया हूं?

Id  StartDate 
1  (null) 
2  12/12/2009 
3  10/10/2009 

मैं एक का चयन करें कथन कि इसके बाद के संस्करण का चयन करता है बनाना चाहते हैं, लेकिन यह भी एक varchar प्रदर्शित करने के लिए एक अतिरिक्त स्तंभ है अगर तारीख जैसे अशक्त नहीं है:

Id  StartDate StartDateStatus 
1  (null)  Awaiting 
2  12/12/2009 Approved 
3  10/10/2009 Approved 

मेरे पास मेरे चयन में निम्नलिखित है, लेकिन ऐसा लगता है कि यह काम नहीं कर रहा है। स्थितियों के सभी Approved की तैयारी में हैं, भले ही दिनांकों कुछ nulls

 select 
      id, 
      StartDate, 
     CASE StartDate 
     WHEN null THEN 'Awaiting' 
     ELSE 'Approved' END AS StartDateStatus 
     FROM myTable 

मेरी क्वेरी के परिणामों देखने की तरह है:

Id  StartDate StartDateStatus 
1  (null)  Approved 
2  12/12/2009 Approved 
3  10/10/2009 Approved 
4  (null)  Approved 
5  (null)  Approved 

StartDate एक smalldatetime है, वहाँ के लिए कि यह कैसे करना चाहिए कुछ अपवाद नहीं है इलाज किया जाएगा?

धन्यवाद

उत्तर

58

प्रयास करें:

select 
    id, 
    StartDate, 
CASE WHEN StartDate IS NULL 
    THEN 'Awaiting' 
    ELSE 'Approved' END AS StartDateStatus 
FROM myTable 

आप कोड जब StartDate = शून्य, मुझे लगता है कि होगा एक कर रहे हैं।


NULLNULL के लिए कभी नहीं के बराबर है (के रूप में शून्य एक मूल्य का अभाव है)। NULL भी NULL के बराबर नहीं है। ऊपर उल्लिखित वाक्यविन्यास एएनएसआई एसक्यूएल मानक है और बातचीत StartDate IS NOT NULL होगी।

आप निम्न चला सकते हैं:

SELECT CASE WHEN (NULL = NULL) THEN 1 ELSE 0 END AS EqualityCheck, 
CASE WHEN (NULL <> NULL) THEN 1 ELSE 0 END AS InEqualityCheck, 
CASE WHEN (NULL IS NULL) THEN 1 ELSE 0 END AS NullComparison 

और यह देता है:

EqualityCheck = 0 
InEqualityCheck = 0 
NullComparison = 1 

पूर्णता के लिए, एसक्यूएल सर्वर आप कर सकते हैं में:

SET ANSI_NULLS OFF; 

कौन सा परिणाम होगा आपके बराबर तुलना में भिन्न काम करते हैं ntly:

SET ANSI_NULLS OFF 

SELECT CASE WHEN (NULL = NULL) THEN 1 ELSE 0 END AS EqualityCheck, 
CASE WHEN (NULL <> NULL) THEN 1 ELSE 0 END AS InEqualityCheck, 
CASE WHEN (NULL IS NULL) THEN 1 ELSE 0 END AS NullComparison 

रिटर्न कौन सा:

EqualityCheck = 1 
InEqualityCheck = 0 
NullComparison = 1 

लेकिन मैं अत्यधिक यह कर के खिलाफ की सिफारिश करेंगे। बाद में अपने कोड को बनाए रखने के लोगों को आप नीचे शिकार करते हैं और तुम्हें चोट लगी करने के लिए मजबूर किया जा सकता है ...

इसके अलावा, यह अब एसक्यूएल सर्वर के आगामी संस्करणों में काम करेंगे:

https://msdn.microsoft.com/en-GB/library/ms188048.aspx

+0

क्यों "ColumnName = NULL" काम नहीं करता है? ऐसा वाक्यविन्यास क्यों स्वीकार नहीं किया जाता है? –

3
select Id, StartDate, 
Case IsNull (StartDate , '01/01/1800') 
When '01/01/1800' then 
    'Awaiting' 
Else 
    'Approved' 
END AS StartDateStatus 
From MyTable 
+0

यदि StartDate = '01/01/1800 ', परिणाम' प्रतीक्षा 'होगा। – Xordal