2012-03-02 18 views
7

मुझे डीबी 2 में दो तिथियों के बीच के दिनों में अंतर प्राप्त करने की आवश्यकता है। मैंने कुछ अलग-अलग प्रश्नों की कोशिश की लेकिन कुछ भी काम नहीं कर रहा है। तो मूल रूप से मुझे यह प्राप्त करने की ज़रूरत है।डीबी 2 में दो तिथियों के बीच कितने दिन की गणना कर रहे हैं?

SELECT DAYS (CURRENT DATE) - DAYS (DATE(CHDLM)) FROM CHCART00 WHERE CHSTAT = '05'; 

मुझे पता है कि अगर मैं CHDLM हटाने और '2012-02-20' की तरह किसी तिथि का उल्लेख यह काम करता है, लेकिन मैं तालिका में उस क्षेत्र के खिलाफ इस चलाने के लिए सक्षम होने की जरूरत है। मैं यह प्रश्न भी कोशिश करता हूं जो किसी मित्र द्वारा मुझे दिया गया था या तो काम नहीं कर रहा है।

select days (current date) - days (date(select concat(concat(concat(concat(left(a2.chdlm,4),'-'),substr(a2.chdlm,4,2)),'-'),right(a2.chdlm,2))) from sysibm.sysdummy1 a1, chcart00 a2 where chstat = '05'; 

कृपया किसी भी मदद की सराहना की जाएगी। धन्यवाद

+0

ऐसा लगता है कि आपके कॉलम डेटाटाइप में कोई समस्या है ... – Teja

उत्तर

8

मुझे लगता है कि @Siva सही रास्ते पर है (DAYS() का उपयोग करके), लेकिन घोंसला CONCAT() एस मुझे चक्कर आ रहा है। मेरा लेना यहाँ है।
ओह, sysdummy1 संदर्भ में कोई बात नहीं है, क्योंकि आपको किसी तालिका से खींचने की आवश्यकता है।
इसके अलावा, अंतर्निहित शामिल वाक्यविन्यास का उपयोग न करें - इसे एक एसक्यूएल एंटी-पैटर्न माना जाता है।

मैंने यहां एक पठनीयता के लिए सीटीई में दिनांक रूपांतरण लपेट लिया है, लेकिन आपको इनलाइन करने से रोकने में कुछ भी नहीं है।

WITH Converted (convertedDate) as (SELECT DATE(SUBSTR(chdlm, 1, 4) || '-' || 
               SUBSTR(chdlm, 5, 2) || '-' ||  
               SUBSTR(chdlm, 7, 2)) 
            FROM Chcart00 
            WHERE chstat = '05') 

SELECT DAYS(CURRENT_DATE) - DAYS(convertedDate) 
FROM Converted 
+0

आपको धन्यवाद ज्यादा एक्स-शून्य, इस काम करता है महान। – jorame

+0

क्षमा करें, एक और प्रश्न, क्या हुआ अगर मैं मैं यह कैसे कर सकते हैं CHCART00 मेज से अधिक क्षेत्रों का चयन करना,? – jorame

+0

कोई बात नहीं मैं यह पता लगा। धन्यवाद – jorame

0
values timestampdiff (16, char( 
    timestamp(current timestamp + 1 year + 2 month - 3 day)- 
    timestamp(current timestamp))) 
1 
= 
422 



values timestampdiff (16, char( 
    timestamp('2012-03-08-00.00.00')- 
    timestamp('2011-12-08-00.00.00'))) 
1 
= 
90 

---------- संपादित galador द्वारा

SELECT TIMESTAMPDIFF(16, CHAR(CURRENT TIMESTAMP - TIMESTAMP_FORMAT(CHDLM, 'YYYYMMDD')) 
FROM CHCART00 
WHERE CHSTAT = '05' 

संपादित

के रूप में यह एक्स-शून्य, इस समारोह से बताया गया है केवल एक अनुमान देता है। यह सच है। सटीक परिणामों के लिए मैं दो तिथियों के ए और बी के बीच के दिनों में अंतर पाने के लिए निम्नलिखित का प्रयोग करेंगे: ,right(a2.chdlm,2)))) from sysibm.sysdummy1 a1,

पर

SELECT days (current date) - days (date(TIMESTAMP_FORMAT(CHDLM, 'YYYYMMDD'))) 
FROM CHCART00 
WHERE CHSTAT = '05'; 
+0

मैं अपनी क्वेरी पर इसे वास्तव में कैसे कार्यान्वित कर सकता हूं? – jorame

+0

मैंने एक प्रश्न में जोड़ा है जो मुझे लगता है कि आपको वह चाहिए जो आपको चाहिए (मान लीजिए कि 'सीएचडीएलएम' दिनांक या टाइमस्टैम्प प्रकार है, या एक उचित रूप से स्वरूपित स्ट्रिंग है)। – bhamby

+0

सीएचडीएलएम को yyyymmdd की तरह स्वरूपित किया गया है, क्या आपको लगता है कि यह क्वेरी उस के साथ काम करेगी? – jorame

0

यह एक समापन ब्रेस की तरह लगता है याद आ रही है तो अपने क्वेरी किया जाएगा

select days(current date) - days(date(select concat(concat(concat(concat(left(a2.chdlm,4),'-'),substr(a2.chdlm,4,2)),'-'),right(a2.chdlm,2)))) from sysibm.sysdummy1 a1, chcart00 a2 where chstat = '05'; 
+0

काम नहीं, मैं हो रही है एक "टोकन concat मान्य नहीं था मान्य टोकन:। (," त्रुटि – jorame

0

यह सिर्फ होना नहीं चाहेंगे:

SELECT CURRENT_DATE - CHDLM FROM CHCART00 WHERE CHSTAT = '05'; 

कि आर चाहिए दो तिथियों के बीच दिनों की संख्या को कम करें, अगर मैं समझता हूं कि गणित डीबी 2 में सही ढंग से कैसे काम करता है।

यदि सीएचडीएलएम एक तारीख नहीं है तो आपको इसे एक में परिवर्तित करना होगा। आईबीएम के मुताबिक DATE() फ़ंक्शन yyyymmdd प्रारूप के लिए पर्याप्त नहीं होगा, लेकिन अगर आप इस तरह प्रारूपित कर सकते हैं तो यह काम करेगा: yyyy-mm-dd।

+0

कैसे मैं उस तरह की तारीख फ़ॉर्मेट कर सकते हैं पर कोई विचार ?? – jorame

+0

Unfortuanately, इन आपरेशन के परिणामों है एक _indefinite period_। (यानी 2 महीने, 3 दिन), भले ही प्रारंभिक प्रारूप मान्य हो। ओपी ने विशेष रूप से दिनों की संख्या के लिए पूछा। –

+0

आह, मेरी माफ़ी, यह दिन (CURRENT_DATE) होना चाहिए - DAYS (CHDLM) –

2

मैं एक जावा डेस्कटॉप आवेदन में डेटाबेस एम्बेडेड डर्बी IBM DB2 में एक ही समस्या का सामना करना पड़ा, और खोज के एक दिन के बाद मैं अंत में पाया कि यह कैसे हुआ:

SELECT days (table1.datecolomn) - days (current date) FROM table1 WHERE days (table1.datecolomn) - days (current date) > 5 

अधिक जानकारी check this site

के लिए
+1

यह कार्य तभी काम करेगा तारीखें हमेशा एक ही महीने में जानी जाती हैं। ('दिन 'दिन-दर-दिन फ़ील्ड लौटाता है)' दिनों 'का उपयोग सामान्य मामलों के लिए काम करना चाहिए, क्योंकि यह दा की संख्या देता है युग के बाद से ys। –

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