2012-04-04 13 views
6

एसक्यूएल में, विशेष महीने के लिए सप्ताह की आरंभिक और समाप्ति तिथि कैसे प्राप्त करें। क्या आप मेरी मदद कर सकते हैं।सप्ताह की आरंभ और समाप्ति तिथि प्राप्त करना? एसक्यूएल सर्वर में?

उत्तर

5

निम्नलिखित जो कुछ भी आप के पहले दिन पर विचार काम करेंगे सप्ताह (रविवार, सोमवार इत्यादि), अगर आप डिफ़ॉल्ट से बदलना चाहते हैं तो सुनिश्चित करें कि आप SET DATEFIRST का उपयोग करें। SET DATEFIRST 1 सप्ताह के पहले दिन सोमवार को बना देगा।

SELECT DATEADD(DAY, 1 - DATEPART(WEEKDAY, GETDATE()), CAST(GETDATE() AS DATE)) [WeekStart], 
     DATEADD(DAY, 7 - DATEPART(WEEKDAY, GETDATE()), CAST(GETDATE() AS DATE)) [WeekEnd] 

संपादित

मैं सिर्फ फिर से पढ़ा है आप अनुरोध और मैं तुम्हें कुछ है जो मैं ऊपर दे दिया है करने के लिए विभिन्न बाद हो सकता है लगता है। मैं दिया

सप्ताह, महीना, तिमाही, छमाही, साल आरंभ और समाप्ति तिथि

SELECT DATENAME(WEEKDAY, DATEADD(DAY, 1 - DATEPART(DAY, GETDATE()), GETDATE())) [FirstDayOfMonth], 
     DATENAME(WEEKDAY, DATEADD(DAY, - DATEPART(DAY, DATEADD(MONTH, 1, GETDATE())), DATEADD(MONTH, 1, GETDATE()))) [LastDayOfMonth] 
+0

धन्यवाद, श्रीमान।गैरेथ डी, मुझे मिल गया, मैं आपकी क्वेरी का उपयोग करता हूं और अब कुछ और कोड जोड़ता हूं, यह आ रहा है धन्यवाद। –

6

सप्ताह उपयोग के पहले दिन पाने के लिए:

select dateadd(wk, datediff(wk, 0, getdate()), 0) + 6 

चेतावनी::

select dateadd(wk, datediff(wk, 0, getdate()), 0) 

अंतिम दिन पहले दिन + 6 हो जाएगा इस संस्कृति के प्रति संवेदनशील है। @@datefirst

1

पर दस्तावेज़ों की जांच करें आपकी आवश्यकता अस्पष्ट है: आप सप्ताह के पहले और आखिरी दिनों में क्या मानते हैं? रविवार और शनिवार? सोमवार और शुक्रवार? सोमवार और रविवार? लेकिन कई दिनांक-संबंधी प्रश्नों के लिए सबसे अच्छा समाधान calendar table बनाना है। इससे आपको अपनी परिभाषा के अनुसार सप्ताहों, महीनों और वर्षों के पहले और अंतिम दिनों को आसानी से सेट करने की क्षमता मिलती है और यदि आवश्यक हो तो कई प्रारूपों में भी।

यह विशेष रूप से उपयोगी है यदि आप वित्तीय वर्षों, व्यावसायिक दिनों, और इस तरह की परिभाषाएं देश और यहां तक ​​कि कंपनी द्वारा भिन्नता के साथ काम करते हैं। आपके तर्क के अपवाद होने पर यह सबसे आसान समाधान भी है, उदा। वर्ष के पहले सप्ताह में 'सामान्य' सप्ताह से अलग नियम होते हैं।

एक कैलेंडर तालिका आप सकता है सप्ताह के पहले और अंतिम दिन प्री-पॉप्युलेट और फिर आपकी क्वेरी कुछ इस तरह हो सकता है के साथ

:

-- first/last days stored as dates in their own columns 
select FirstDayOfThisWeek, LastDayOfThisWeek 
from dbo.Calendar 
where BaseDate = @SomeDate 

-- first/last days stored as bit flags 
select max(BaseDate) 
from dbo.Calendar 
where BaseDate <= @SomeDate and IsFirstDayOfWeek = 0x1 
0

यहाँ: आप पहली बार और महीने के अंतिम सप्ताह के दिन चाहते हैं इस चाल करना होगा ।

 Select CONVERT(varchar(50), GETDATE(),105) 'GETDATE' , 
     CONVERT(varchar(50), DATEADD(DAY, 2 - DATEPART(WEEKDAY, GETDATE()), CAST(GETDATE() AS DATE)),105) [WeekStart], 
CONVERT(varchar(50),DATEADD(DAY, 8 - DATEPART(WEEKDAY, GETDATE()), CAST(GETDATE() AS DATE)) ,105)[WeekEnd], 
CONVERT(varchar(50),DATEADD(dd, -DAY(getdate()) + 1, getdate()),105) MonthStart, 
CONVERT(varchar(50),DATEADD(dd, -DAY(DATEADD(mm, 1, getdate())), DATEADD(mm, 1, getdate())),105) MonthStart, 
CONVERT(varchar(50), DATEADD(q, DATEDIFF(q, 0, GETDATE()), 0),105) AS 'QStart Date',  
CONVERT(varchar(50), DATEADD(d, -1, DATEADD(q, DATEDIFF(q, 0, GETDATE()) + 1,0)),105) AS 'QEnd Date', 
CONVERT(varchar(50), CAST(CAST(((((MONTH(GETDATE()) - 1)/6) * 6) + 1) AS VARCHAR) + '-1-' + CAST(YEAR(GETDATE()) AS VARCHAR) AS DATETIME),105) StartOfHalfYear, 
CONVERT(varchar(50), CAST(CAST(((((MONTH(GETDATE()) - 1)/6) * 6) + 6) AS VARCHAR) + '-1-' + CAST(YEAR(GETDATE()) AS VARCHAR) AS DATETIME),105)EndOfHalfYear, 
CONVERT(varchar(50), DATEADD(yy, DATEDIFF(yy,0,getdate()), 0),105) AS StartOfYear, 
CONVERT(varchar(50), DATEADD(yy, DATEDIFF(yy,0,getdate()) + 1, -1),105) AS EndOfYear 
1

नीचे एक केस स्टेटमेंट है जिसका उपयोग आप अपने दिनांक मूल्य के लिए सप्ताहांत बनाने के लिए कर सकते हैं। यह आपके सप्ताह सोमवार या मंगलवार या बुध ... आदि पर निर्भर करेगा। सप्ताह के किस दिन आपने @pDate के रूप में सेट किया है।

मापदंडों

DECLARE @pDate Date = NULL --Replace with your date, which will also be the first day of the week 
DECLARE @pDatePart SMALLINT = DATEPART(dw, @pDate) 

फिर अपने चयन

CASE 
    WHEN DATEPART(dw, CAST(DATEVALUE AS DATE)) BETWEEN @pDatePart AND 7 THEN DATEADD(d, (DATEPART(dw, CAST(DATEVALUE AS DATE))*-1)[email protected], CAST(DATEVALUE AS DATE)) 
    WHEN DATEPART(dw, CAST(DATEVALUE AS DATE)) BETWEEN 1 AND @pDatePart-1 THEN DATEADD(d, (DATEPART(dw, CAST(DATEVALUE AS DATE))*-1)+(@pDatePart-7), CAST(DATEVALUE AS DATE)) 
    END 
    AS DynamicWeekBegin 

तुम हमेशा के लिए, बस DATEADD का उपयोग कर (घ, 6 से सप्ताह के अंतिम तिथि प्राप्त कर सकते हैं, मामले के बाद इस मामले वक्तव्य डाल बनाएं STATEMENT)

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