0

4 分の 1 の長さの一連の日付範囲を返すことができるクエリを探しています。

たとえば、入力が 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

これは、少しグーグルで調べた後に行ったことです。もっと効率的な方法を考えていましたが、これで十分だと思います。最初の部分は日付テーブルの入力で、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)
                       )
         )
于 2013-03-21T14:34:43.237 に答える