只是想補充一點,這是我做了一些Google搜索後做的。我正在考慮一些更有效的方法,但我認爲這足以滿足我的目的。第一部分是填充日期表,第二部分是計算季度範圍。
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)
)
)
[你有什麼試過](http://www.whathaveyoutried.com)? – Kermit 2013-03-20 13:59:57
您使用的是什麼版本的SQL? – 2013-03-20 14:04:42
請通過添加適當的標記(Oracle,SQL Server,MySQL等)來指定您要定向的RDBMS。可能會有利用不被普遍支持的語言或產品功能的答案。此外,通過使用特定的RDBMS標記它,您的問題可能會得到更好的答案的人的關注。 – Taryn 2013-03-20 14:05:46