[英]How to get first day and last day for every week in a month?
如何獲得一個月中每個星期的第一天(星期一)和最后一天(星期日)?
示例:2015年7月
第一周
第一:6月29日
上一個:7月5日
第二周
第一:7月6日
上一個:7月12日
第三周
第一:7月13日
上一個:7月19日
第四周
第一日:7月20日
上一個:7月26日
第五周
第一日:7月27日
最后:8月2日
干得好:
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
我認為這會幫助你
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)
嘗試這個:
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;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.