首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

怎么取得一个时间段的每个月

2013-09-28 
如何取得一个时间段的每个月要求列出一段时间里的年份+月份declare@strdate datetime, @enddate datetimes

如何取得一个时间段的每个月
要求列出一段时间里的年份+月份


declare  @strdate datetime,
 @enddate datetime

set @strdate = '2012-11-20' --会计期间为 每个月20日起至次月19日
set @enddate = '2013-03-19'

select @strdate A, @enddate B


得出以下结果
201212
201301
201302
201303 sql
[解决办法]
ALTER function generateTimeV2
(
    @begin_date datetime,
    @end_date datetime
)
returns @t table(date VARCHAR(8))
as
begin
    insert into @t
    select left(CONVERT(CHAR(30),dateadd(dd,number,@begin_date)),4)+SUBSTRING(CONVERT(CHAR(30),dateadd(dd,number,@begin_date)),6,2) AS date
    from master..spt_values
    where type='p' and dateadd(dd,number,@begin_date)<=@end_date
    return
end
 
--测试示例
select * from dbo.generateTimeV2('2012-11-20','2013-03-19')

[解决办法]

declare @strdate datetime,@enddate datetime
 
set @strdate = '2012-11-20' --会计期间为 每个月20日起至次月19日
set @enddate = '2013-03-19'
 
;WITH a1 (date,ym) AS
(
SELECT DATEADD(mm,1,@strdate),CONVERT(CHAR(6),DATEADD(mm,1,@strdate),112)
UNION ALL
SELECT DATEADD(mm,1,date),CONVERT(CHAR(6),DATEADD(mm,1,date),112) FROM a1
WHERE date<=@enddate
)
SELECT ym FROM a1

[解决办法]
学习版主的
select  distinct left(CONVERT(CHAR(30),dateadd(dd,number,'2012-11-20'),23),4)+SUBSTRING(CONVERT(CHAR(30),dateadd(dd,number,'2012-11-20'),23),6,2) AS date    
from master..spt_values     where type='p' and dateadd(dd,number,'2012-11-20')<='2013-03-19'

热点排行