2010-06-07 79 views
2

例如, 开始日期=“20100530”和 结束日期=“20100602”如何计算两组日期之间的数值?

如何可以写一个SQL以显示下面的结果?

month: may, 2 days 
month: June, 2 days 
+0

哪个版本的sql server? – 2010-06-07 02:25:38

回答

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) 
+0

我不认为它真的很重要,但你的the_date和1参数应该颠倒 – 2010-06-07 02:22:01

+0

唉,失败!忏悔! ;)(另外,固定的,谢谢你在服务器嘲讽你时遇到的那些事情之一) – Donnie 2010-06-07 02:35:21

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究竟是如何应该被计算。这是开始和结束日期之间的日子吗?它是第二个参数的那一天吗?

相关问题