0

我正在寻找一个可以返回一系列四分之一长的日期范围的查询。

例如,如果输入是 2013 年 2 月 1 日和 2014 年 3 月 31 日,那么输出将如下所示:

start     end
2/1/2013  4/30/2013
5/1/2013  7/31/2013
8/1/2013  10/31/2013
11/1/2013 1/31/2014
2/1/2014  3/31/2014

请注意,最后一个季度只有 2 个月。提前感谢您的帮助。

4

1 回答 1

0

只是想补充一点,这是我在谷歌搜索后所做的。我正在考虑一些更有效的方法,但我认为这足以满足我的目的。第一部分是填充日期表,第二部分是计算季度范围。

DECLARE @StartDate SMALLDATETIME
DECLARE @EndDate SMALLDATETIME

SET @StartDate = '1/1/2011'
SET @EndDate = '12/31/2011'

-- creates a date table, not needed if there is one already
DECLARE @date TABLE ( [date] SMALLDATETIME )

DECLARE @offset INT
SET @offset = 0

WHILE ( @offset < DATEDIFF(dd, @StartDate, DATEADD(dd, 1, @EndDate)) ) 
    BEGIN
        INSERT  INTO @date ( [date] )
    VALUES  ( DATEADD(dd, @offset, @StartDate) )
    SELECT  @offset = @offset + 1
END ;

WITH    dateCTE
      AS ( SELECT   ROW_NUMBER() OVER ( ORDER BY [date] ASC ) AS qID ,
                    [date] AS qStart ,
                    CASE WHEN DATEADD(dd, -1, DATEADD(q, 1, [date])) > @EndDate
                         THEN @EndDate
                         ELSE DATEADD(dd, -1, DATEADD(q, 1, [date]))
                    END AS qEnd
           FROM     @date
           WHERE    [date] = @StartDate
                    OR ( DATEDIFF(mm, @StartDate, [date]) % 3 = 0
                         AND DATEPART(dd, [date]) = DATEPART(dd,
                                                          @StartDate)
                       )
         )
于 2013-03-21T14:34:43.237 回答