我想在本周找到记录,只是声明当前日期。 例如:
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
答案 0 :(得分:15)
以下是一些有用的命令,可以获得一周中的每一天
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
答案 1 :(得分: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)
答案 2 :(得分:1)
其他人建议的查询可能有效,但您还没有为您定义“周”。根据国家/地区和商业原因,一周可能是周日,周一至周日,周一至周五等。
因此,找到一周的第一天和最后一天的最佳解决方案可能是calendar table,您可以在其中为每个您需要的日期预先填充一周的前几天和最后几天。然后,您可以使用简单查询来获取要在查询中使用的正确开始日期和结束日期:
select @StartDate = FirstDayOfWeek, @EndDate = LastDayOfWeek
from dbo.Calendar
where BaseDate = @SomeDate
此解决方案还具有以下优势:您可以通过向日历表添加新列来轻松使用一周的不同定义。