【问题标题】: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 日

【问题讨论】:

    标签: sql sql-server-2008


    【解决方案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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-03-04
          • 2021-12-11
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多