【问题标题】:Grab last 8 quarters start and end dates between two dates在两个日期之间获取最后 8 个季度的开始和结束日期
【发布时间】:2017-11-28 01:58:02
【问题描述】:

我想获取两个日期之间每个季度的开始和结束日期

declare @pdtmParameter1 datetime = '30-Jun-2015'
declare @pdtmParameter2 datetime = '31-Mar-2017'

SELECT DISTINCT


Result should be

2015-03-31 00:00:00.000 2015-06-30 00:00:00.000
2015-07-01 00:00:00.000 2015-09-30 00:00:00.000
2015-10-01 00:00:00.000 2015-12-30 00:00:00.000
2015-12-31 00:00:00.000 2016-03-30 00:00:00.000
2016-03-31 00:00:00.000 2016-06-30 00:00:00.000
2016-07-01 00:00:00.000 2016-09-30 00:00:00.000
2016-10-01 00:00:00.000 2016-12-30 00:00:00.000
2016-12-31 00:00:00.000 2017-03-30 00:00:00.000

【问题讨论】:

  • 除非你有一个数字表或日历表,那么基本的方法就是把它们列出来。

标签: sql database sql-server-2008 tsql


【解决方案1】:
declare @pdtmParameter1 datetime = '30-Jun-2015'
declare @pdtmParameter2 datetime = '31-Mar-2017'

        SELECT DISTINCT DATEADD(Day,1,DATEADD(Month, (number-1)*3-3, @pdtmParameter1) ) AS QuarterStart,
        DATEADD(Month, (number-1)*3, @pdtmParameter1)   AS QuarterEnd
    FROM    (SELECT number
FROM (
  VALUES (1), (2), (3), (4), (5), 
         (6), (7), (8)
) [1 to 8](number)


    WHERE   number BETWEEN 1 AND 8 ) getnumbers

【讨论】:

  • 我不认为这是 MySQL
【解决方案2】:

如果您正在寻找确切的季度开始和结束日期:

declare @pdtmParameter1 datetime = '30-Jun-2015'
declare @pdtmParameter2 datetime = '31-Mar-2017'

DECLARE @QUARTER_START INT
SET @QUARTER_START = DATEDIFF(q, 0, @pdtmParameter1)

SELECT * FROM 
    (
    SELECT DATEADD(QUARTER, @QUARTER_START+QTR, 0) AS StartOfQuarter
    ,DATEADD(DD,-1,DATEADD(QUARTER, @QUARTER_START+QTR+1, 0)) AS EndOfQuarter
    FROM (
        SELECT QTR
        FROM (
            VALUES (0),(1), (2), (3), (4),(5), (6), (7), (8)
            ) [NUMBERS](QTR)
         )T 
    )RESULT WHERE EndOfQuarter >= @pdtmParameter1 and EndOfQuarter <= @pdtmParameter2

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-10
    • 2014-02-06
    • 1970-01-01
    • 2019-11-02
    • 2020-12-17
    • 1970-01-01
    相关资源
    最近更新 更多