如何得到会计期间日期列表
比如给你一个参数 2008和26
就能得到三列数据
200801 2007-12-26 2008-01-25
200802 2008-01-26 2008-02-25
-------
200812 2008-11-26 2008-12-25
还有一个是自然月
给个2008
200801 2008-01-01 2008-01-31
200802 2008-02-01 2008-02-30
-------
200812 2008-12-01 2008-12-30
[解决办法]
declare @year int =2008
declare @day int=26;
select number
,t.yearnumber*100+number as MonthNumber
,dateadd(d,1,dateadd(month,-1,convert(date,convert(varchar(20), t.yearnumber*10000+number*100+daynumber-1)))) startDate
,convert(date,convert(varchar(20), t.yearnumber*10000+number*100+daynumber-1)) endDate
from master..spt_values sv
cross join (select @year yearnumber,@day daynumber) as t
where [type]='p'
and number>0
and number<=12
select number
,t.yearnumber*100+number as MonthNumber
,convert(date,convert(varchar(20), t.yearnumber*10000+number*100+1)) startDate
,dateadd(d,-1,dateadd(month,1,convert(date,convert(varchar(20), t.yearnumber*10000+number*100+1)))) endDate
from master..spt_values sv
cross join (select @year yearnumber,@day daynumber) as t
where [type]='p'
and number>0
and number<=12
select * from @ta
[解决办法]
--借花献佛:
declare @year int,@day int,@date_b datetime
select @year=2008,@day=31
set @date_b=dateadd(month,-1,convert(datetime,convert(varchar(20), @year*10000+100+@day)))
select number
,dateadd(month,number-1,@date_b) startDate
,dateadd(day,-1,dateadd(month,number,@date_b)) endDate
from master..spt_values sv
where [type]='p' and number between 1 and 12
select number
,t.yearnumber*100+number as MonthNumber
,convert(datetime,convert(varchar(20), t.yearnumber*10000+number*100+1)) startDate
,dateadd(d,-1,dateadd(month,1,convert(datetime,convert(varchar(20), t.yearnumber*10000+number*100+1)))) endDate
from master..spt_values sv
cross join (select @year yearnumber,@day daynumber) as t
where [type]='p' and number between 1 and 12