SqL存储过程查找日期,月份和日期

时间:2012-10-10 17:08:47

标签: sql sql-server stored-procedures

在SQL Server中如何编写查询以获取startdate和enddate之间的月份,月份的天数(月份),当月的实际天数

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个月 - 29 - (Frm startdate 2月4日至12月30日至4月12日(4月底))
30 - (12月4日的天数)

1 个答案:

答案 0 :(得分: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'

- &GT;

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

Example at SQL Fiddle.