如何获得一个月内每周的第一天和最后一天?
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
【讨论】:
以上是关于如何获得一个月内每周的第一天和最后一天?的主要内容,如果未能解决你的问题,请参考以下文章