sql server打印一个寄存器,从你的初始日期开始直到你的最后日期

时间:2015-12-17 10:37:35

标签: sql sql-server datetime intervals

我的数据库中有很多寄存器,包含startdate和enddate。我需要打印这些日期之间的间隔,每月一个月。例如:

2015-01-01
2015-02-01
2015-03-01
2015-04-01

我需要像

一样打印
{{1}}

直到2015-12-01才能注册

2 个答案:

答案 0 :(得分:2)

如果我理解正确

DECLARE @startDate DATE, @endDate DATE
SELECT @startDate = '2015-01-01', @endDate = '2015-12-01' 
;WITH Calender AS (
    SELECT @startDate AS CalanderDate
    UNION ALL
    SELECT DATEADD(month,1,CalanderDate) FROM Calender
    WHERE DATEADD(month,1,CalanderDate) <= @endDate
)
SELECT * FROM Calender ORDER BY CalanderDate

FIDDLE

答案 1 :(得分:0)

;与CTE AS( 选择0 AS月 UNION ALL 选择月份+ 1 来自CTE,TESTE t1 几个月&lt; datediff(month,t1.dateid,t1.enddate)和t1.code = t1.code) SELECT distinct t2.code,DATEADD(MONTH,months,t2.dateid),t2.Dscription,t2.Credit,t2.enddate 从CTE,TESTE t2,其中t2.code = t2.code和DATEADD(MONTH,months,t2.dateid)&lt; = t2.enddate但我需要更改为正常选择因为crystal报告不接受cte