选择某个年/月内记录的天数

Chr*_*son 5 sql t-sql sql-server sql-server-2005

在sql server中,我有一个表,其中包含作业发布的开始和结束日期.在给定用户一个月和一年的情况下,我需要找到该发布的给定年/月的开始日期和结束日期之间的天数.

因此,如果发布开始日期是2010/11/15,结束日期是2010/12/05那么输出应该是:

November  16 days
December  5 days
Total     21 days
Run Code Online (Sandbox Code Playgroud)

我一直用这个打我的头靠在墙上,而且我的想法很新鲜.

Ric*_*iwi 2

这可能是最简洁的答案。

declare @start datetime, @end datetime
select @start = '20101115', @end = '20101205'

select datename(month,@start+number), count(*)
from master..spt_values
where type='P'
  and number between 0 and datediff(d,@start,@end)
group by datename(month,@start+number), convert(char(6),@start+number,112)
order by convert(char(6),@start+number,112)
Run Code Online (Sandbox Code Playgroud)

它的工作范围可达 2048 天(7-8 年),但如果您需要,可以延长更长时间(仅根据要求 - 这看起来会更复杂)。

这样做的唯一原因convert(char是使 11 月出现在 12 月之前,并且也出现在明年 1 月之前。