2010-10-12 4 views
10

मेरे पास एक संग्रहीत प्रक्रिया है जिसे एक महीने int (1-12) और एक वर्ष int के रूप में स्वीकार करना है। उन दो मूल्यों को देखते हुए, मुझे उस महीने की तिथि सीमा निर्धारित करना है। तो मुझे उस महीने के पहले दिन का प्रतिनिधित्व करने के लिए एक डेटाटाइम वैरिएबल की आवश्यकता है, और उस महीने के आखिरी दिन का प्रतिनिधित्व करने के लिए एक और डेटाटाइम चर। क्या यह जानकारी प्राप्त करने का एक आसान तरीका है?एसक्यूएल सर्वर 2005 किसी भी वर्ष किसी भी महीने के लिए पहली और अंतिम तिथि प्राप्त करें

उत्तर

14
DECLARE @Month int 
DECLARE @Year int 

set @Month = 2 
set @Year = 2004 

select DATEADD(month,@Month-1,DATEADD(year,@Year-1900,0)) /*First*/ 

select DATEADD(day,-1,DATEADD(month,@Month,DATEADD(year,@Year-1900,0))) /*Last*/ 

लेकिन महीने के आखिरी दिन के लिए आपको समय घटक के रूप में क्या चाहिए? अपने datetimes आधी रात के अलावा अन्य समय घटक है, तो आप अच्छी तरह से बंद बेहतर हो सकता है जैसे

WHERE COL >= DATEADD(month,@Month-1,DATEADD(year,@Year-1900,0)) 
    AND COL < DATEADD(month,@Month,DATEADD(year,@Year-1900,0)) 

कुछ कर रही इस तरह से अपने कोड यदि आप अंत में एसक्यूएल सर्वर 2008 और अधिक से अधिक परिशुद्धता datetime डेटाटाइप्स में माइग्रेट काम करना जारी रखेंगे में।

+0

धन्यवाद। यह काम किया। मैंने यह जवाब पसंद किया क्योंकि यह सबसे साफ प्रतीत होता है। – Ristogod

18

महीने का पहला दिन: माह केSELECT DATEADD(mm, DATEDIFF(mm, 0, GETDATE()), 0)

अंतिम दिन:SELECT DATEADD(ms, -3, DATEADD(mm, DATEDIFF(m, 0, GETDATE()) + 1, 0))

स्थानापन्न GETDATE के लिए दिनांक समय चर मूल्य()।

मुझे बहुत पहले this very handy page से मिला है, जिसमें "तारीख के सोमवार" और "महीने के पहले सोमवार" जैसे अन्य दिनांक गणनाओं का पूरा समूह है।

+0

यह काम किया। हालांकि मैंने एक अलग जवाब चुना क्योंकि मैंने इसके वाक्यविन्यास को प्राथमिकता दी थी। आपके द्वारा लिंक किया गया पृष्ठ जानकारी का एक बड़ा स्रोत है। धन्यवाद। – Ristogod

1
DECLARE @Month int; 
DECLARE @Year int; 
DECLARE @FirstDayOfMonth DateTime; 
DECLARE @LastDayOfMonth DateTime; 

SET @Month = 3 
SET @Year = 2010 

SET @FirstDayOfMonth = CONVERT(datetime, CAST(@Month as varchar) + '/01/' + CAST(@Year as varchar)); 
SET @LastDayOfMonth = DATEADD(month, 1, CONVERT(datetime, CAST(@Month as varchar)+ '/01/' + CAST(@Year as varchar))) - 1; 
+0

यह काम किया। हालांकि मैंने एक अलग उत्तर चुना क्योंकि मैंने इसके वाक्यविन्यास और कनवर्ट करने के गैर-उपयोग को प्राथमिकता दी थी। धन्यवाद। – Ristogod

1
DECLARE @Month INTEGER 
DECLARE @Year INTEGER 
SET @Month = 10 
SET @Year = 2010 

DECLARE @FirstDayOfMonth DATETIME 
DECLARE @LastDayOfMonth DATETIME 

SET @FirstDayOfMonth = Str(@Year) + RIGHT('0' + Str(@Month), 2) + '01' 
SET @LastDayOfMonth = DATEADD(dd, -1, DATEADD(mm, 1, @FirstDayOfMOnth)) 
SELECT @FirstDayOfMonth, @LastDayOfMonth 
+0

यह काम किया। हालांकि मैंने एक अलग उत्तर चुना क्योंकि मैंने इसके वाक्यविन्यास और अधिकार के गैर-उपयोग को प्राथमिकता दी थी। धन्यवाद। – Ristogod

1

इस प्रयास करें:

Declare @month int, @year int; 
Declare @first DateTime, @last DateTime; 
Set @month=10; 
Set @year=2010; 
Set @first=CAST(CAST(@year AS varchar) + '-' + CAST(@month AS varchar) + '-' + '1' AS DATETIME); 
Set @last=DATEADD(s,-1,DATEADD(mm, DATEDIFF(m,0,@first)+1,0)); 

SELECT @first,@last; 
+0

यह काम किया। हालांकि मैंने एक अलग उत्तर चुना क्योंकि मैंने इसके वाक्यविन्यास और कास्टिंग के गैर-उपयोग को प्राथमिकता दी थी। धन्यवाद। – Ristogod

1
select [FirstDay Of The Month] as Text ,convert(varchar,dateadd(d,-(day(getdate()-1)),getdate()),106) 'Date' 
union all 
select [LastDay Of The Month], convert(varchar,dateadd(d,-day(getdate()),dateadd(m,1,getdate())),106) 
0

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

select dateadd(dd,-day(dateadd(mm,1,getdate())),dateadd(mm,1,getdate())) 

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

select dateadd(dd,-day(getdate())+1,getdate()) 
1
DECLARE @Month int = 3, @Year int = 2016 
DECLARE @StartDate DATETIME 
DECLARE @EndDate DATETIME 

-- First date of month 
SET @StartDate = DATEADD(MONTH, @Month-1, DATEADD(YEAR, @Year-1900, 0)); 
-- Last date of month 
SET @EndDate = DATEADD(SS, -1, DATEADD(MONTH, @Month, DATEADD(YEAR, @Year-1900, 0))) 

यह समय सारिणी के साथ पहली तारीख और अंतिम तिथि लौटाएगा।

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