我正在寻找一个可以返回一系列四分之一长的日期范围的查询。
例如,如果输入是 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 个月。提前感谢您的帮助。
我正在寻找一个可以返回一系列四分之一长的日期范围的查询。
例如,如果输入是 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 个月。提前感谢您的帮助。
只是想补充一点,这是我在谷歌搜索后所做的。我正在考虑一些更有效的方法,但我认为这足以满足我的目的。第一部分是填充日期表,第二部分是计算季度范围。
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)
)
)