declare @start datetime
declare @end datetime
set @start = '2015-06-01' --起始日期
set @end = '2016-08-01' --结束日期
select SUBSTRING(convert(nvarchar(7),dateadd(m,a.number,convert(datetime,convert(nvarchar(7),@start,120)+'-01')),120),1,CHARINDEX('-',convert(nvarchar(7),dateadd(m,a.number,convert(datetime,convert(nvarchar(7),@start,120)+'-01')),120))-1 ) years,
SUBSTRING( convert(nvarchar(7),dateadd(m,a.number,convert(datetime,convert(nvarchar(7),@start,120)+'-01')),120),CHARINDEX('-',convert(nvarchar(7),dateadd(m,a.number,convert(datetime,convert(nvarchar(7),@start,120)+'-01')),120))+1 ,len(convert(nvarchar(7),dateadd(m,a.number,convert(datetime,convert(nvarchar(7),@start,120)+'-01')),120))-charindex('-',convert(nvarchar(7),dateadd(m,a.number,convert(datetime,convert(nvarchar(7),@start,120)+'-01')),120))) years
FROM (select number from master.dbo.spt_values where type='p') a
where a.number<=datediff(m,dateadd(m,a.number,convert(datetime,convert(nvarchar(7),@start,120)+'-01')),dateadd(m,a.number,convert(datetime,convert(nvarchar(7),@end,120)+'-01')))
查询结果
若是要合并起来,如下
declare @start datetime
declare @end datetime
set @start = '2015-06-01'
set @end = '2016-08-01'
select convert(nvarchar(7),dateadd(m,a.number,convert(datetime,convert(nvarchar(7),@start,120)+'-01')),120) month_you_need
FROM (select number from master.dbo.spt_values where type='p') a
where a.number<=datediff(m,dateadd(m,a.number,convert(datetime,convert(nvarchar(7),@start,120)+'-01')),dateadd(m,a.number,convert(datetime,convert(nvarchar(7),@end,120)+'-01')))
查询结果