【问题标题】:Number of days in quarter, SQL Server季度天数,SQL Server
【发布时间】:2012-11-14 10:57:17
【问题描述】:

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

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

我想计算每个季度在这两天之间存在的天数

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

问候。

【问题讨论】:

  • 您可以根据跨越的季度将两个日期指定的期间拆分为子范围,类似于 this answer 每月拆分的方式。获得子范围后,您可以为包含的每个子范围获得 DATEDIFF(DAY, SubrangeStart, SubrangeEnd)

标签: sql sql-server days


【解决方案1】:
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

【讨论】:

    【解决方案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

    【讨论】:

      猜你喜欢
      • 2019-05-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多