我的数据库中有很多寄存器,包含startdate和enddate。我需要打印这些日期之间的间隔,每月一个月。例如:
2015-01-01
2015-02-01
2015-03-01
2015-04-01
我需要像
一样打印{{1}}
直到2015-12-01才能注册
答案 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
答案 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