如何获得一个月内每周的第一天和最后一天?

Posted

技术标签:

【中文标题】如何获得一个月内每周的第一天和最后一天?【英文标题】:How to get first day and last day for every week in a month? 【发布时间】:2015-07-24 04:07:35 【问题描述】:

如何获取一个月中每个周的第一天(星期一)和最后一天(星期日)?

示例:2015 年 7 月

第 1 周 第一:6 月 29 日 最后:7 月 5 日

第 2 周 第一:7 月 6 日 最后:7月12日

第 3 周 第一时间:7 月 13 日 最后:7月19日

第 4 周 第一时间:7 月 20 日 最后:7月26日

第 5 周 第一时间:7 月 27 日 最后:8 月 2 日

【问题讨论】:

【参考方案1】:

给你:

SELECT DATEADD(DAY, 2-DATEPART(WEEKDAY, CURRENT_TIMESTAMP), CURRENT_TIMESTAMP); -- first day of week

SELECT DATEADD(DAY, 2-DATEPART(WEEKDAY, CURRENT_TIMESTAMP) + 6, CURRENT_TIMESTAMP); -- last day of week

SQLFiddle Demo

【讨论】:

【参考方案2】:

试试这个:

SET DATEFIRST 1;
GO

declare @Month date = '150701';
declare @Index int = 1;
declare @StartWeek date;
declare @MonthWeek table ([Week] char(6), StartDate date, EndDate date)

set @StartWeek = DATEADD(dd, -(DATEPART(dw, @Month)-1), @Month)

insert into @MonthWeek([Week], StartDate, EndDate)
select 'Week ' + cast(@Index as char), @StartWeek, DATEADD(D, 6, @StartWeek);

select @StartWeek = DATEADD(D, 7, @StartWeek), @Index = @Index + 1;

while DATEPART(M,@StartWeek) = DATEPART(M,@Month) 
begin
   insert into @MonthWeek([Week],StartDate,EndDate)
   select 'Week ' + cast(@Index as char), @StartWeek, DATEADD(D, 6, @StartWeek);

   select @StartWeek = DATEADD(D, 7, @StartWeek), @Index = @Index + 1
end;

select * from @MonthWeek;

【讨论】:

【参考方案3】:

我认为它会帮助你

declare @sdate date='20150601'
declare @edate date=dateadd(dd,-1,dateadd(month,1,@sdate))


; with cte as
 (
 select @sdate  as startdate 
 union all
 select dateadd(dd,1,startdate) from cte where startdate < @edate
 )
  select convert(varchar(20),startdate,106)as Date,datename(WEEKDAY,startdate),day(startdate)/7+1 as WEEKNO from cte
  where datename(WEEKDAY,startdate) in ('Monday','Sunday')
     option (MaxRecursion 32665)

这里是Demo SQL FIDDLE

【讨论】:

以上是关于如何获得一个月内每周的第一天和最后一天?的主要内容,如果未能解决你的问题,请参考以下文章

C#如何获得当前月的第一天与最后一天

python怎么获得每个月的第一天和最后一天

js 获取当前月和当前周的第一天和最后一天

如何使用js获取某月的第一天和最后一天

js如何获取上个月第一天和最后一天

JS获得本月的第一天和最后一天