在SQL中通过当前日期查找本周的日期范围?

13

我想通过本周日期来查找记录。例如:

     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>=@dateStart  AND date<=@dateEnd

你需要测试一下今天是星期几,然后加上或减去相应的天数来计算日期。 - BugFinder
3个回答

21

以下是获取每周各天的有用命令

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

5

所以您只想要本周的记录?

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
别人建议的查询可能有效,但是你没有定义一周对你来说是什么。根据国家/地区和业务原因,一周可以是周日至周六、周一至周日、周一至周五等。
因此,找到一周的第一天和最后一天的最佳解决方案可能是一个日历表,在其中预先填充每个日期所需的一周的第一天和最后一天。然后,您可以使用简单的查询获取正确的开始和结束日期以在查询中使用:
select @StartDate = FirstDayOfWeek, @EndDate = LastDayOfWeek
from dbo.Calendar
where BaseDate = @SomeDate

这个解决方案的优点在于,您可以通过向日历表添加新列来轻松处理一周的不同定义。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接