2009-06-30 25 views
6

गत माह के पहले दिन का चयन करें मैं हैं कि कोई तारीख एक मासिक क्वेरी के लिए पिछले महीने में जांच की जरूरत है। मैं के साथ चयनित तिथि तुलना करने के लिएमें (डीबी 2) एसक्यूएल

CURRENT DATE - 1 MONTH 

प्राप्त कर सकते हैं, लेकिन मैं कल्पना नहीं कर सकते आज की तारीख हर महीने बिल्कुल के पहले दिन हो जाएगा। क्या महीने के पहले दिन को महीने और महीने निकालने के बिना एक साथ बनाया गया है और इसे एक साथ वापस gluing?

उत्तर

10

इस साल का पहला दिन:

date('0001-01-01') + year(current date) years - 1 year 

इस महीने का पहला दिन:

date('0001-01-01') + year(current date) years - 1 year + month(current date) months - 1 month 

पिछले महीने का पहला दिन:

date('0001-01-01') + year(current date) years - 1 year + month(current date) months - 2 months 
+0

अच्छा, ये काफी दर्द रहित हैं। धन्यवाद। –

0

मेरा मानना ​​है कि निम्नलिखित आप के लिए काम करेंगे।

ROUND_TIMESTAMP (somedate,'W') 
+0

मैं लिनक्स, यूनिक्स, और Windows प्लेटफार्मों के लिए डीबी 2 के लिए सूचीबद्ध है कि समारोह नहीं दिखाई दे रहा। यह शायद मेनफ्रेम डीबी 2 के लिए उपलब्ध है। –

+1

मेरा बुरा। कड़ाई से जेड/ओएस। यह मुझे आश्चर्यचकित करता है कि कोई कंपनी एक ही उत्पाद को कैसे जारी कर सकती है और प्लेटफार्मों में जितना संभव हो सके सार्वभौमिक नहीं है। मैं कल्पना नहीं कर सकता कि एक ऐसा कारण है जो हर जगह काम नहीं करेगा। इसके बाहर, मुझे नीचे पोस्ट किए गए किसी भी अन्य समाधान के अलावा कोई अन्य समाधान नहीं पता है या वर्तमान तारीख को स्ट्रिंग भागों में महीने, दिन, वर्ष, महीने और दिन संशोधित करने और फिर नई तारीख का पुनर्निर्माण करने के बारे में पता नहीं है। – moleboy

+0

शर्मिंदा, जब मैंने इसे देखा तो यह बिल्कुल सही लग रहा था। –

1

अधिक जानकारी के साथ इसे निकालने के लिए। उपरोक्त समाधान सही है यदि आप महीने के पहले दिन चाहते हैं, तो कहें कि आप महीने के आखिरी दिन चाहते हैं, या मेरे मामले में मुझे अगली तिमाही का अंतिम दिन चाहिए।

मैं ऊपर से

date('0001-01-31') + year(date(prevQdate))years - 1 year + month(prevQdate) months + 2 months) 

कौन सा मुझे दे नहीं कर रहा था कि मैं क्या चाहता था कर रहा था, कभी कभी तिथि 31 दिनों के साथ महीनों के लिए 31 के बजाय 30 वीं ...

करने के लिए इसे बदल रहा था

date('0001-01-31') + year(date(prevQdate))years - 1 year + **(month(prevQdate) + 2)** months) 

मुझे जो चाहिए वह मुझे दिया। ऐसा लगता है कि पिछली तिमाही की तारीख से महीनों का पहला जोड़ा मेरी तारीख के दिन भाग को रीसेट कर रहा था और इस प्रकार महीनों का दूसरा जोड़ा महीने में केवल 30 दिनों के साथ काम कर रहा था। जब डीबी 2 में तारीख हेरफेर के इस पद्धति का उपयोग से सावधान रहना करने के लिए

बस कुछ।

+1

एक महीने के आखिरी दिन का उत्पादन करने का सबसे विश्वसनीय तरीका एक अभिव्यक्ति बनाना है जो उसके बाद के महीने के पहले दिन का उत्पादन करता है, और उसके बाद एक दिन घटाता है। अगली तिमाही के अंतिम दिन, उदाहरण के लिए DATE ('0001-01-01') + वर्ष (वर्तमान दिनांक) वर्ष - 1 वर्ष + ((क्वार्टर (वर्तमान दिनांक) +1) * 3) महीने - 1 दिन –

11

पहले वर्तमान माह का दिन:

CURRENT_DATE - DAY(CURRENT_DATE) DAYS 

प्रथम अंतिम के दिन:

CURRENT_DATE - (DAY(CURRENT_DATE)-1) DAYS 

वर्तमान वर्ष की पहली

CURRENT_DATE - (DAY(CURRENT_DATE)-1) DAYS - (MONTH(CURRENT_DATE)-1) MONTHS 

अंतिम अंतिम महीने का दिन है महीना:

CURRENT_DATE - (DAY(CURRENT_DATE)-1) DAYS - 1 MONTH 
0

LUW 9.7 (और मुझे लगता है कि z/os) अंतर्निहित कार्यों का उपयोग कर विधियों।

वर्तमान महीने के अंतिम दिन:

LAST_DAY(CURRENT DATE) 

पिछले महीने का पहला दिन:

LAST_DAY(CURRENT DATE - 2 MONTHS) + 1 DAY or (LUW) TRUNCATE(CURRENT DATE - 1 month, 'MONTH') 

वर्तमान महीने के पहले दिन:

LAST_DAY(CURRENT DATE - 1 MONTH) + 1 DAY or (LUW) TRUNCATE(CURRENT DATE, 'MONTH'); 
2

यहाँ कर रहे हैं मेरी डीबी 2 एसक्यूएल के स्निपेट महीना गणना धोखा शीट:

वर्तमान महीने की शुरुआत:

CURRENT DATE + 1 DAYS - DAY(CURRENT DATE) DAYS 

वर्तमान महीने के आखिर में:

LAST_DAY(CURRENT DATE) 

पहले महीने की शुरुआत:

CURRENT DATE + 1 DAYS - DAY(CURRENT DATE) DAYS - 1 MONTHS 

पहले महीने के आखिर में:

LAST_DAY(CURRENT DATE - 1 MONTHS) 

अगले महीने की शुरुआत: अगले महीने के

CURRENT DATE + 1 DAYS - DAY(CURRENT DATE) DAYS + 1 MONTHS 

अंत:

LAST_DAY(CURRENT DATE + 1 MONTHS) 
संबंधित मुद्दे