我被困住了,之前我没有做过这样的事情。通过提供今天的日期,例如2010-12-04,我应该得到以下内容:
startdate = 2010-11-29
enddate = 2010-12-05
基本上我需要过滤我的查询,以便为我提供这个'周'的数据
任何关于如何开始这个的想法都会很棒!
谢谢,
塔伦
答案 0 :(得分:2)
更新:此功能归Graham at SqlTeam所有。它返回任何给定日期的星期一日期;它应该处理任何DATEFIRST
设置:
CREATE FUNCTION dbo.WeekCommenceMondayDate(@MidWeekDate DateTime)
RETURNS DateTime AS
BEGIN
DECLARE @WeekCommence DateTime
SET @WeekCommence = DateAdd(d, -((@@DATEFIRST + DatePart(dw, @MidWeekDate) -2) % 7), @MidWeekDate)
RETURN @WeekCommence
END
declare @today datetime = '2010-12-04'
declare @weekstartdate datetime
set @weekstartdate = dbo.WeekCommenceMondayDate(@today)
select @weekstartdate as weekstartdate
select DATEADD(DD, 6, @weekstartdate) as weekenddate
有关各种日期函数,请参阅here。
答案 1 :(得分:0)
以下内容应该有效 - 显然取决于您何时需要几周开始 - 以及使用的语言,因此您可能需要调整它。
DELCARE @startdate DATETIME = @thedate
WHILE DATENAME(WEEKDAY, @startdate) <> 'Monday'
BEGIN
SET @startdate = DATEADD(DAY, -1, @startdate)
END
' @startdate should now be the closest Monday on or prior to @thedate.
... @ enddate计算留给读者练习。 :)