2012-04-27 88 views
7

本週我想查找記錄只是聲明當前日期。 例子:在sql中查找當前日期的日期範圍?

 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 2012-04-27 10:54:39

回答

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查詢?

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

的查詢中其他人建議可以工作,但是你還沒有定義什麼是「周」。根據國家/地區和商業原因,一週可能是Sun-Sat,Mon-Sun,Mon-Fri等。

因此尋找本週第一天和最後一天的最佳解決方案可能是calendar table您可以根據需要爲每個日期預先填寫本週的第一天和最後幾天。然後你可以使用一個簡單的查詢,以獲得正確的開始和結束日期在查詢中使用:

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

該解決方案還具有的優點是你可以用一個星期的不同定義,通過添加新的列到工作輕鬆您的日曆表。