【问题标题】:Generate records on interval of time (Weekly, Monthly, Quarterly, Yearly)按时间间隔生成记录(每周、每月、每季度、每年)
【发布时间】:2011-09-02 18:56:41
【问题描述】:

我需要根据给定的开始日期、结束日期和时间频率(每周、每月等)生成记录

示例 1:

  1. 开始日期:2011 年 1 月 15 日
  2. 结束日期:2011 年 12 月 31 日
  3. 频率:每月

生成的报告:

  1. 1 月 15 日 - 1 月 31 日

  2. 2 月 1 日 - 2 月 28 日(闰年 2 月 29 日)

  3. 3 月 1 日 - 3 月 31 日

。 . .

  • 12 月 4 日至 1 日 - 12 月 31 日

示例 2

  • 开始日期:2011 年 1 月 15 日
  • 结束日期:2011 年 12 月 31 日
  • 频率:每周

生成的报告:

  • 1 月 1 日至 15 日 - 1 月 16 日

  • 1 月 2 日至 17 日 - 1 月 23 日

  • 1 月 3 日至 24 日 - 1 月 30 日

。 . .

  • 12 月 50 日至 26 日 - 12 月 31 日

与季度相同。

任何帮助

【问题讨论】:

    标签: sql tsql sql-server-2008


    【解决方案1】:

    我认为您要问的基本上是如何循环几个月/几周/几个季度。

    这应该会给你一个良好的开端,我希望你能找到正确的方向。您只需要使用内置的 SQL 日期函数,例如 DATEADD, DATEDIFF & DATEPART

    DECLARE @startDate DATETIME
    DECLARE @endDate DATETIME
    DECLARE @TimePeriod NVARCHAR(50)
    DECLARE @RptDate DATETIME
    
    SET @startDate = '1/15/2011'
    SET @endDate = '12/31/2011'
    SET @TimePeriod = 'Monthly'
    
    SET @RptDate = @startDate
    WHILE @RptDate < @endDate
    BEGIN
        PRINT @RptDate      --- This prints out the dates I think you want
        IF @TimePeriod = 'Monthly'
            SET @RptDate = DATEADD(mm, 1, DATEADD(dd, -DAY(@RptDate) + 1,@RptDate))
    
        IF @TimePeriod = 'Weekly'
            SET @RptDate = DATEADD(ww, 1, DATEADD(dd, -DATEPART(weekday,@RptDate) + 1,@RptDate))
    
        IF @TimePeriod = 'Quarterly'
            SET @RptDate = DATEADD(qq, 1, DATEADD(qq, DATEDIFF(qq, 0, @RptDate), -1) + 1)
    
    END
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-10-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多