2012-03-09 19 views
10

मैं, तो SYSDATEDB2कोई भी तारीख डेटा प्रकार से अधिक शून्य है?

SELECT * FROM SOMESCHEMA.SOMETABLE WHERE SYSDATE > @A 

में इस क्वेरी NULL है यह @A के किसी भी मूल्य से अधिक हो सकता है, यह सोचते हैं कि @A और SOMESCHEMA.SOMETABLE.SYSDATE एक दिनांक डेटा प्रकार है?

कृपया मदद करें। अग्रिम में धन्यवाद।

+3

अगर डीबी 2 "एएनएसआई शून्य" अर्थ विज्ञान तो केवल बाइनरी ऑपरेटर यह सच होना चाहिए "है आईएस नल ", AFAIK। –

+1

@ पीएसटी डीबी 2 [एएनएसआई है] (http://www.dbforums.com/db2/765612-handing-null-values-db2.html#post2808106), आपका मतलब क्या है कि केवल एकमात्र द्विआधारी ऑपरेटर जो सच है "शून्य है"_ ? –

उत्तर

8

एक अन्य भविष्यवाणी जो मूल्यों की तुलना करने के लिए उपयोगी है जिसमें शून्य मान हो सकता है DISTINCT predicate है। सामान्य कॉलम (COL1 = COL2) का उपयोग करके दो स्तंभों की तुलना करना सत्य होगा यदि दोनों कॉलम में बराबर गैर-शून्य मान होता है। यदि दोनों कॉलम शून्य हैं, तो परिणाम गलत होगा क्योंकि शून्य किसी भी अन्य मूल्य के बराबर नहीं है, न कि एक और शून्य मूल्य भी। DISTINCT predicate का उपयोग करके, शून्य मान बराबर माना जाता है। तो COL1 को COL2 से DISTINCT नहीं होगा यदि दोनों कॉलम में बराबर गैर-शून्य मान होता है और जब दोनों कॉलम शून्य मान होते हैं।

DB2 Null Handling

इसका मतलब है कि सभी तुलना संचालन झूठा होगा, क्योंकि आप कुछ करने के लिए एक अज्ञात मूल्य की तुलना कर रहे हैं। तो इससे कोई फर्क नहीं पड़ता कि आप किस तुलना में उपयोग करते हैं (केवल आईएस न्यूल/न्यूल ऑपरेशन काम नहीं करता है!), यह गलत होगा।

आप क्वेरी काम करने के लिए आप की तरह

SELECT * 
    FROM SOMESCHEMA.SOMETABLE 
WHERE COALESCE(SYSDATE, TIMESTAMP_FORMAT('0001-01-01 23:59:59', 'YYYY-MM-DD HH24:MI:SS')) > @A 
+0

उत्तर देने के लिए धन्यवाद, लेकिन यह मेरे लिए थोड़ा मंद लगता है। यह कहता है: 'शून्य किसी भी अन्य मूल्य के बराबर नहीं है', _equal_ _greater than_ condition के साथ समान है? कृपया मदद करे। –

+0

मैंने यह स्पष्ट करने के लिए अपना जवाब संपादित किया कि सभी तुलना विफल हो जाती हैं यदि तुलना के एक या दोनों पक्षों में शून्य शामिल है (आईएस/आईएस न्यूल के अलावा)। – Eggi

+1

सुपर डुपर अल्ट्रा मेगा आपकी मदद के लिए बहुत बहुत धन्यवाद, लेकिन _fail_ द्वारा आपका क्या मतलब है, क्योंकि क्वेरी में कोई त्रुटि फेंक जाएगी? –

7

एक और संभावना IS NULL उपयोग करने के लिए अगर एक मूल्य के रिक्त है परीक्षण करने के लिए है कुछ का उपयोग करना चाहिए चाहते हैं:

SELECT * FROM SOMESCHEMA.SOMETABLE WHERE SYSDATE > @A OR SYSDATE IS NULL 

में मूल्य शामिल होंगे अपने COALESCE फ़ंक्शन के बजाय, लौटाए गए मानों का सेट। यह केवल साधारण मामलों के साथ काम करता है।

0

आप दो नल दिनांक (P.EndDate, C.EndDate) की तुलना करने के लिए इस समाधान का उपयोग कर सकते हैं:

[MinDate] = 
     CASE 
      WHEN 
       ISNULL(C.EndDate,P.EndDate) <= ISNULL(P.EndDate,C.EndDate) 
      THEN 
       ISNULL(C.EndDate,P.EndDate) 
      ELSE 
       ISNULL(P.EndDate,C.EndDate) 
     END 
संबंधित मुद्दे