2010-12-05 196 views
2

我被卡住了,我以前没有做过这样的事情。通过提供当天的日期比如2010-12-04,我应该得到以下几点:在SQL中使用今天的日期获取星期日期(星期一)

开始日期= 2010-11-29
结束日期= 2010-12-05

基本上我需要过滤我的查询,使其给我这个'周'的数据

任何想法如何开始这将是伟大的!

感谢,

塔伦

+0

我认为SQLServer中有一个datename函数,你可以用它来从今天的日期(2010-12-04)获得“星期六”,然后你可以做一个select case类型的事情。你在使用SQL Server吗? – 2010-12-05 01:55:32

+0

这个问题可能是重复的:建议你搜索一下... – 2010-12-05 01:56:41

回答

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

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计算留给读者练习。 :)

+0

@Mitch。如果你可以保证DATEFIRST的特定值,那么我会同意 - 我可能仍然会使用上述内容,但是请检查DATEPART(WEEKDAY与相关值,我不会称之为可怕的_then_ - 除非它被称为非常频繁... – 2010-12-05 01:59:29

相关问题