簡體   English   中英

如何獲得一個月中每周的第一天和最后一天?

[英]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

SQLFiddle Demo

我認為這會幫助你

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)

這是演示SQL FIDDLE

嘗試這個:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM