季度,SQL Server的天数

时间:2012-11-14 10:57:17

标签: sql sql-server days

如果给出开始日期和结束日期,我想计算每季度的天数。

例如,一个表有两列,开始日期和结束日期。 开始日期= 9月1日,11月14日结束。

我想计算每个季度出现的这两天之间的天数

Q3 - 30 days
Q4 - 45 days (for this scenario)

问候。

2 个答案:

答案 0 :(得分:4)

declare @StartDate date='2012-09-01';
declare @EndDate date='2012-11-14';



select CEILING(month(dateadd(q,datediff(q,0,dateadd(dd,number ,@StartDate)),0))/3.0) as  QuarterNo,
        COUNT(*) as 'number of days'
 from   master..spt_values
 where  type='p'
 and    dateadd(dd,number ,@StartDate)<=@EndDate
 group by dateadd(q,datediff(q,0,dateadd(dd,number ,@StartDate)),0)


SQL fiddle demo

答案 1 :(得分:2)

您可以使用递归查询来获取此信息。这会生成开始日期和结束日期之间的日期列表,然后获取每季度的天数:

;with cte (start, enddate) as
(
  select startdate, enddate
  from yourtable
  union all
  select dateadd(dd, 1, start), enddate
  from cte
  where dateadd(dd, 1, start) <= enddate
)
select datepart(q, start) Quarter, count(datepart(q, start)) NoDays
from cte
group by datepart(q, start)

请参阅SQL Fiddle with Demo