1

在 SQL Server 中,如何编写查询以获取开始日期和结束日期之间的月份、月份的天数(月份)、月份中的实际天数

startdate 和 enddate 作为输入参数传递,我需要知道月数、实际天数和当月天数

例如:

Start date : 2012-04-02
End date :   2012-08-23

我需要得到结果,

Month      Days     ActualDays _ inMonth    
----------------------------------------------
04         29       30   - (The no of days on Apr'12 )
05         31       31    
06         31       31    
07         31       31    
08         31       31

04 -month
29 -(Frm startdate 2-Apr'12 to until 30-Apr'12(Apr End))
30 - (The no days on Apr'12 )

4

1 回答 1

1

这是一个计算一个月天数的过程。我不知道您所说的“实际日子”是什么意思,或者这可能会有所不同。

if object_id('spMonthList') is not null
    drop procedure spMonthList
go
create procedure dbo.spMonthList(
    @start date
,   @end date)
as
; with  Months as
        (
        select  dateadd(month, datediff(month, 0, @start), 0) as MonthStart
        union all
        select  dateadd(month, 1, MonthStart)
        from    Months
        where   MonthStart < @end
        )
select  datepart(month, MonthStart) as Month
,       datediff(day, MonthStart, dateadd(month, 1, MonthStart)) as NumberOfDays
from    Months;
go
exec spMonthList '2012-04-01', '2012-08-01'

-->

Month  NumberOfDays
4      30
5      31
6      30
7      31
8      31

SQL Fiddle 的示例。

于 2012-10-10T17:25:40.207 回答