2009-06-18 12 views
5

इससे पहले कि मैं एक कॉलेज में काम करते हैं और हमारे छात्र प्रबंधन प्रणाली शैक्षणिक वर्ष आरंभ तिथि पर या अगस्त के 1 से पहले सोमवार से निर्धारित होता है। मैं अपने प्रश्न में इस मैच के लिए की जरूरत है, वहाँ एक रास्ता आसानी से पर या इस तिथि से पहले सोमवार की तारीख पाने के लिए है।टी एसक्यूएल सोमवार तारीख

उत्तर

2
set datefirst 1; -- Make Monday the first day of the week 

select dateadd(dd, -1*(datepart(dw, '2009-08-01')-1), '2009-08-01') 

रिटर्न जुलाई 27 वें, 2009, जो या उससे पहले 1 अगस्त 2005 तक यह बदलें सोमवार जब अगस्त 1 था एक सोमवार और क्वेरी 08-01

1

आप DatePart का उपयोग काम करने के दिन पाने के लिए कर सकता है, और फिर अपने सोमवार में वापस करने के लिए एक छोटे से गणित कर। यह उदाहरण यूएसएफ की डिफ़ॉल्ट तिथि 7 का उपयोग कर रहा है (जिसमें सोमवार सप्ताह का दिन 2 है)। सप्ताह के किस दिन सोमवार को आपके लोकेल के लिए जोड़ने के लिए दिन समायोजित करें।

select dateadd(dd, -datepart(dw, '2009-08-01') + 2, '2009-08-01') 
+0

मैंने इसे नीचे चिह्नित किया है क्योंकि निम्नलिखित गलत परिणाम देता है: dateadd (dd, -datepart (dw, '2011-05-15') + 2, 2011 का चयन करें -05-15 ')। यह '2011-05-16' देता है। –

0

बहुत hacky वापस आ जाएगी

DECLARE @weekday int 

SELECT @weekday = DATEPART(WEEKDAY, '1-Aug-2009') 

SELECT CASE 
WHEN @weekday = 1 THEN '1-Aug-2009' ELSE DATEADD (dd,(@weekday-2)*-1, '1-Aug-2009') 
END 
0

यह एक सामान्य एल्गोरिथ्म है कि किसी भी महीने के पहले सोमवार वापस आ जाएगी (@inputdate) है:

DATEADD(wk, DATEDIFF(wk, 0, dateadd(dd, 6 - datepart(day, @inputDate), @inputDate)), 0) 

यह एसक्यूएल सर्वर में महीने के पहले सोमवार प्राप्त करने के लिए एक आम तरीका है। यह link कैसे उपरोक्त गणना कई अन्य तिथि गणना के साथ काम करता है बताते हैं।

यहाँ कैसे उपरोक्त एल्गोरिथ्म पर या एक महीने की 1 दिन पहले सोमवार को पाने के लिए इस्तेमाल किया जा सकता है:

-- Set month to get Monday before or at 1st of month. 
DECLARE @inputDate DATETIME 
SET @inputDate = '2009-08-01' 

-- Get first Monday of month. 
DECLARE @firstMonday DATETIME 
SET @firstMonday = DATEADD(wk, DATEDIFF(wk, 0, dateadd(dd, 6 - datepart(day, @inputDate), @inputDate)), 0) 

-- Determine date for first Monday on or before 1st of month. 
DECLARE @startDate DATETIME 
SET @startDate = @firstMonday 
IF @firstMonday > @inputDate 
    SET @startDate = DATEADD(wk, -1, @firstMonday) 

SELECT @startDate 
4

स्वीकार किए जाते हैं जवाब मेरे लिए काम नहीं किया क्योंकि मैं जरूरत दोनों एक रविवार सप्ताह और एक ही प्रश्न में एक सोमवार सप्ताह। यह अलग "datefirst" सेटिंग्स भर में काम करता है:

SELECT DATEADD(d, -((DATEPART(WEEKDAY, '20110515') - DATEPART(dw, '19000101') + 7) % 7), '20110515') 

"DatePart (DW, '19,000,101')" अपने "datefirst" 1900/01/01 के बाद से सेटिंग का निर्धारण करेगा एक सोमवार को किया गया था। यदि आप मंगलवार के आधार पर सप्ताह चाहते हैं, तो आप 1 9 000101 से 1 9 000102 बदल सकते हैं।

बीटीडब्ल्यू, '20110515' एकमात्र दिनांक प्रारूप है जो सभी SQL सर्वर संस्कृति सेटिंग्स में काम करता है। '2011-05-06' जैसी तिथियों को कुछ देशों में गलत व्याख्या की जाएगी। (इटज़िक बेन-गण को क्रेडिट करने के लिए क्रेडिट)

+0

+1 एक सुंदर, 'datefirst' नास्तिक समाधान के लिए। –

+0

अच्छा, स्वीकार्य उत्तर होना चाहिए – nhaberl