我被卡住了,我以前没有做过这样的事情。通过提供当天的日期比如2010-12-04,我应该得到以下几点:在SQL中使用今天的日期获取星期日期(星期一)
开始日期= 2010-11-29
结束日期= 2010-12-05
基本上我需要过滤我的查询,使其给我这个'周'的数据
任何想法如何开始这将是伟大的!
感谢,
塔伦
我被卡住了,我以前没有做过这样的事情。通过提供当天的日期比如2010-12-04,我应该得到以下几点:在SQL中使用今天的日期获取星期日期(星期一)
开始日期= 2010-11-29
结束日期= 2010-12-05
基本上我需要过滤我的查询,使其给我这个'周'的数据
任何想法如何开始这将是伟大的!
感谢,
塔伦
更新:此功能是由于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。
下面应该工作 - 显然取决于当你想星期开始 - 和使用的语言,所以你可能需要调整它。
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计算留给读者练习。 :)
@Mitch。如果你可以保证DATEFIRST的特定值,那么我会同意 - 我可能仍然会使用上述内容,但是请检查DATEPART(WEEKDAY与相关值,我不会称之为可怕的_then_ - 除非它被称为非常频繁... – 2010-12-05 01:59:29
我认为SQLServer中有一个datename函数,你可以用它来从今天的日期(2010-12-04)获得“星期六”,然后你可以做一个select case类型的事情。你在使用SQL Server吗? – 2010-12-05 01:55:32
这个问题可能是重复的:建议你搜索一下... – 2010-12-05 01:56:41