我如何在两个日期之间计算和分组?

时间:2010-06-07 02:02:00

标签: sql sql-server

例如, 开始日期='20100530'和 结束日期='20100602'

如何编写SQL以显示以下结果?

month: may, 2 days
month: June, 2 days

2 个答案:

答案 0 :(得分:1)

使用递归CTE生成开始和结束之间的所有日期,然后执行一个简单的组并计数(小心,未经测试,但如果不完全正确则应该关闭):

with dates (the_date) as (
  select @start_date 
  UNION ALL
  select dateadd(dd, 1, the_date) from dates where the_date <= @end_date
)
  select
    datepart(mm, the_date) month,
    count(*) num_days
  from
    dates
  group by
    datepart(mm, the_date)

答案 1 :(得分:0)

TBH,您确实需要提供有关源数据的更多架构和信息。但是,鉴于我们知之甚少,您应该能够写下:

Select DateName('month', [Date]) As Month
    , Cast(DateDiff(d, @StartDate, @EndDate) As varchar(10) - 1) + ' days' 
From Table
Where [Date] Between @StartDate And @EndDate

我们需要知道的是如何优化我们的解决方案,这正是应该如何计算2 days。是开始日期和结束日期之间的日子吗?是第二个参数的日期吗?