sql server 2012 查询时间段月份数据方法

最近用户有个需求,通过一个时间段,来计算出,每个月的天数。记录一下之前做过的功能.

1.创建一个函数

create FUNCTION[dbo].[Func_GetMonthFirstDayByDay]

(

@Date DATE

)

RETURNS DATETIME

AS

BEGIN

RETURN DATEADD(MONTH,DATEDIFF(MONTH,0,@Date),0)

END

 2.创建一个存储过程。

create proc[dbo].[Proc_月份时间段]

(

@StartTime datetime,

 @EndTime datetime

)

AS

--declare @StartTime datetime

--set @StartTime='2013-01-09'

--declare @EndTime datetime

--set @EndTime='2013-11-13'

declare @月份第一天 datetime

set @月份第一天=[dbo].[Func_GetMonthFirstDayByDay](@StartTime)

declare @tb table (IDint,月份nvarchar(100),开始时间datetime,结束时间datetime)

declare @月份 nvarchar(100)

declare @开始时间 datetime

declare @i int

set @i=1

declare @count int

select @count=count(*)from master..spt_values

where type='P'and dateadd(month,number,@月份第一天)<=@EndTime

insert into@tb(ID,月份,开始时间,结束时间) 

select

ROW_NUMBER()OVER (ORDERBY number ) as ID,convert(varchar(7),dateadd(month,number,@月份第一天),120)AS 月份,

dateadd(month,number,@月份第一天)as 开始时间,

dateadd(month,number,dateadd(ms,-3,DATEADD(mm,DATEDIFF(m,0,@StartTime)+1, 0))) as 结束时间

from master..spt_values

where type='P'and dateadd(month,number,@月份第一天)<=@EndTime

update @tb set 开始时间=@StartTimewhereID=1

update @tb set 结束时间=@EndTimewhereID=@count

SELECT *,datediff(day,开始时间,结束时间)+as 天数 FROM @tb

--exec [dbo].[Proc_月份时间段] '2013-1-13','2013-11-13'

 3.执行之后的效果如下:

 

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值