Sql 如何在两个日期之间进行计数和分组?

Sql 如何在两个日期之间进行计数和分组?,sql,sql-server,Sql,Sql Server,比如说,, 开始日期='20100530'和 结束日期='20100602' 如何编写SQL以显示以下结果 month: may, 2 days month: June, 2 days 使用递归CTE生成开始和结束之间的所有日期,然后执行简单的分组和计数警告,未测试,但如果不完全正确,则应接近: with dates (the_date) as ( select @start_date UNION ALL select dateadd(dd, 1, the_date) from

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

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

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

使用递归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)

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天,以完善我们的解决方案。是开始日期和结束日期之间的天数吗?今天是第二个参数的日期吗

我认为这并不重要,但是你的日期和参数应该颠倒过来