从年份获取季度StartDate和EndDate

Pra*_*t16 4 sql-server sql-server-2008

我正在使用SQL Server2008。我想获取一年中所有季度的开始日期和结束日期。例如,如果我在查询中传递2013,则输出应为

StartDate                 EndDate                   QuarterNo
-------------------------------------------------------------
2013-04-01 00:00:00.000   2013-06-30 00:00:00.000      1
2013-07-01 00:00:00.000   2013-09-30 00:00:00.000      2
2013-10-01 00:00:00.000   2013-12-31 00:00:00.000      3
2014-01-01 00:00:00.000   2014-03-31 00:00:00.000      4
Run Code Online (Sandbox Code Playgroud)

由于从4月1日开始的财政年度,我想从4月1日开始为第一季度。如何获得此输出?感谢帮助...

pod*_*ska 5

select 
    dateadd(M, 3*number, CONVERT(date, CONVERT(varchar(5),@year)+'-1-1')),
    dateadd(D,-1,dateadd(M, 3*number+3, CONVERT(date, CONVERT(varchar(5),@year)+'-1-1'))),
    Number QuarterNo
from master..spt_values 
where type='p' 
and number between 1 and 4  
Run Code Online (Sandbox Code Playgroud)

您可能需要使用日期,而不是日期时间,否则该季度的最后一天中的任何时间都不包含在该季度中(例如:2013-06-30 14:15)

反之,使用 datepart

select ((DATEPART(q,@date)+2) % 4)+1
Run Code Online (Sandbox Code Playgroud)


小智 5

我最喜欢的方式,但 EOMONTH 和 DATEFROMPARTS 在 SQLServer 2012 之前不存在:

DECLARE
    @FISCAL_YEAR INT = 2013,
    @QUATER INT = 2
SELECT 
    DATEFROMPARTS(@fiscal_year,(@Quater * 3)-2,1) AS QuaterStart,
    EOMONTH(DATEFROMPARTS(@fiscal_year,@Quater * 3,1)) AS QuaterEnd 
Run Code Online (Sandbox Code Playgroud)