【问题标题】:Number of Weeks between Parameter Dates - Group by Week - SQL参数日期之间的周数 - 按周分组 - SQL
【发布时间】:2013-07-09 19:37:28
【问题描述】:

我的存储过程@FromDate 和@ToDate 中有2 个参数,我想计算出@FromDate 和@ToDate 之间的周数,@FromDate 始终是星期一,而@ToDate 始终是星期日,但日期可以涵盖数周、数月等。

目前我有 DATEDIFF(WW, @FromDate, @ToDate)

返回 4,但我希望它在 4 行中返回 1、2、3 和 4,而不仅仅是 1 行。

实现这一目标的最佳方法是什么?

【问题讨论】:

    标签: sql sql-server-2008 sql-server-2008-r2


    【解决方案1】:

    如果我猜对了:

    With T( Number ) as
    (
        Select 0 as Number
            union all
        Select Number + 1
            from T
            where Number < DATEDIFF(WW, @FromDate, @ToDate)
    
    )
    
    SELECT NUMBER FROM T WHERE Number>0;
    

    SQLFiddle demo

    【讨论】:

    • 如果答案为 0,则不会给出正确的结果。下面的答案将处理这种情况
    • @RohitSingh:我已更改此查询以处理此问题,以防 0 周它现在什么也不返回。谢谢
    • 谢谢,效果很好。存储过程的方式总是至少为 1,因此 0 周不会进入它,但无论如何都会使用它以确保安全。
    【解决方案2】:
    DECLARE @StartDate DATETIME
    DECLARE @EndDate DATETIME
    
    SET @StartDate = GETUTCDATE() - 90
    SET @EndDate = GETUTCDATE() 
    
    DECLARE @WeekNumber INT
    
    SET @WeekNumber = DATEDIFF(WW, @StartDate, @EndDate) ;
    
    WITH    CTE_WeekNumber ( WeekNumber )
    
          AS ( SELECT   1
               WHERE    @WeekNumber >= 1
               UNION ALL
               SELECT   WeekNumber + 1
               FROM     CTE_WeekNumber
               WHERE    @WeekNumber >= WeekNumber + 1
             )
    
    SELECT  *
    FROM    CTE_WeekNumber
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-10
      • 1970-01-01
      • 2020-08-12
      • 2011-03-02
      • 2012-01-23
      相关资源
      最近更新 更多