2012-04-27 90 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 

该解决方案还具有的优点是你可以用一个星期的不同定义,通过添加新的列到工作轻松您的日历表。