इससे पहले कि मैं एक कॉलेज में काम करते हैं और हमारे छात्र प्रबंधन प्रणाली शैक्षणिक वर्ष आरंभ तिथि पर या अगस्त के 1 से पहले सोमवार से निर्धारित होता है। मैं अपने प्रश्न में इस मैच के लिए की जरूरत है, वहाँ एक रास्ता आसानी से पर या इस तिथि से पहले सोमवार की तारीख पाने के लिए है।टी एसक्यूएल सोमवार तारीख
उत्तर
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
आप DatePart का उपयोग काम करने के दिन पाने के लिए कर सकता है, और फिर अपने सोमवार में वापस करने के लिए एक छोटे से गणित कर। यह उदाहरण यूएसएफ की डिफ़ॉल्ट तिथि 7 का उपयोग कर रहा है (जिसमें सोमवार सप्ताह का दिन 2 है)। सप्ताह के किस दिन सोमवार को आपके लोकेल के लिए जोड़ने के लिए दिन समायोजित करें।
select dateadd(dd, -datepart(dw, '2009-08-01') + 2, '2009-08-01')
बहुत 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
यह एक सामान्य एल्गोरिथ्म है कि किसी भी महीने के पहले सोमवार वापस आ जाएगी (@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
स्वीकार किए जाते हैं जवाब मेरे लिए काम नहीं किया क्योंकि मैं जरूरत दोनों एक रविवार सप्ताह और एक ही प्रश्न में एक सोमवार सप्ताह। यह अलग "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' जैसी तिथियों को कुछ देशों में गलत व्याख्या की जाएगी। (इटज़िक बेन-गण को क्रेडिट करने के लिए क्रेडिट)
+1 एक सुंदर, 'datefirst' नास्तिक समाधान के लिए। –
अच्छा, स्वीकार्य उत्तर होना चाहिए – nhaberl
- 1. टी एसक्यूएल
- 2. टी-एसक्यूएल
- 3. टी-एसक्यूएल (एसक्यूएल सर्वर)
- 4. टी-एसक्यूएल
- 5. टी-एसक्यूएल
- 6. टी-एसक्यूएल
- 7. टी-एसक्यूएल
- 8. टी-एसक्यूएल
- 9. टी-एसक्यूएल
- 10. टी-एसक्यूएल
- 11. टी-एसक्यूएल
- 12. टी-एसक्यूएल
- 13. टी-एसक्यूएल
- 14. टी-एसक्यूएल
- 15. टी-एसक्यूएल
- 16. टी-एसक्यूएल
- 17. टी-एसक्यूएल
- 18. टी-एसक्यूएल
- 19. टी-एसक्यूएल
- 20. टी-एसक्यूएल
- 21. टी-एसक्यूएल
- 22. टी-एसक्यूएल
- 23. टी-एसक्यूएल
- 24. टी-एसक्यूएल
- 25. टी-एसक्यूएल
- 26. टी-एसक्यूएल
- 27. टी-एसक्यूएल
- 28. टी-एसक्यूएल
- 29. टी-एसक्यूएल
- 30. टी-एसक्यूएल
मैंने इसे नीचे चिह्नित किया है क्योंकि निम्नलिखित गलत परिणाम देता है: dateadd (dd, -datepart (dw, '2011-05-15') + 2, 2011 का चयन करें -05-15 ')। यह '2011-05-16' देता है। –