2012-04-27 13 views
7

मैं इस सप्ताह तक रिकॉर्ड ढूंढना चाहता हूं बस वर्तमान तारीख घोषित करें। उदाहरण:एसक्यूएल में वर्तमान तिथि से सप्ताह की तिथि सीमा खोजें?

 select datename(dw,getdate()) -- Example today is Friday "27-04-2012" 

तो मैं कैसे प्राप्त कर सकते हैं तिथि सीमा

 start on monday "23-04-2012" or sunday "22-04-2012" As @dateStart to 

    end on sunday "29-04-2012" or saturday "28-04-2012" As @dateEnd 

तो मैं क्वेरी द्वारा

 select * from table where date>[email protected] AND date<[email protected] 
+0

आपको उस सप्ताह के किस दिन के लिए परीक्षण करना होगा और अपनी तारीख में प्रासंगिक संख्याओं को घटाएं/जोड़ना होगा। – BugFinder

उत्तर

13

यहां सप्ताह

SELECT 
    DATEADD(wk, DATEDIFF(wk,0,GETDATE()), -2) SatOfPreviousWeek, 
    DATEADD(wk, DATEDIFF(wk,0,GETDATE()), -1) SunOfCurrentWeek, 
    DATEADD(wk, DATEDIFF(wk,0,GETDATE()), 0) MondayOfCurrentWeek, 
    DATEADD(wk, DATEDIFF(wk,0,GETDATE()), 1) TuesOfCurrentWeek, 
    DATEADD(wk, DATEDIFF(wk,0,GETDATE()), 2) WedOfCurrentWeek, 
    DATEADD(wk, DATEDIFF(wk,0,GETDATE()), 3) ThursOfCurrentWeek, 
    DATEADD(wk, DATEDIFF(wk,0,GETDATE()), 4) FriOfCurrentWeek, 
    DATEADD(wk, DATEDIFF(wk,0,GETDATE()), 5) SatOfCurrentWeek 

के प्रत्येक दिन प्राप्त करने के लिए कुछ उपयोगी आदेशों हैं आप फिर समयावधि प्राप्त करने के लिए अपने प्रश्न में इन का प्रयोग करेंगे:

SELECT * 
FROM yourTable 
WHERE yourDate >= DATEADD(wk, DATEDIFF(wk,0,GETDATE()), -1) -- Sunday 
AND yourDate <= DATEADD(wk, DATEDIFF(wk,0,GETDATE()), 5) -- Saturday 
4

तो आप केवल इस सप्ताह से रिकॉर्ड चाहते हैं का चयन कर सकते हैं?

SELECT t.* 
FROM table t 
WHERE t.date >= DATEADD(DAY, DATEDIFF(DAY, 0, GETDATE())/7 * 7, 0) 
AND t.date <= DATEADD(DAY, DATEDIFF(DAY, -1, GETDATE()), 0) 
1

प्रश्नों कि दूसरों ने सुझाव दिया है कि काम कर सकते हैं, लेकिन आपने यह परिभाषित नहीं किया है कि आपके लिए "सप्ताह" क्या है। देश/क्षेत्र और व्यावसायिक कारणों के आधार पर, एक सप्ताह सूर्य-शनि, सोम-सूर्य, सोम-शुक्र आदि हो सकता है

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

select @StartDate = FirstDayOfWeek, @EndDate = LastDayOfWeek 
from dbo.Calendar 
where BaseDate = @SomeDate 

यह समाधान भी लाभ यह है कि आप आसानी से करने के लिए नए स्तंभ जोड़कर एक सप्ताह के अलग परिभाषा के साथ काम कर सकते हैं है आपकी कैलेंडर तालिका