给定一个日期,按月每行拆分。
CREATE TABLE #temp(from_date DATE,to_date DATE); INSERT INTO #temp (from_date,to_date) VALUES ( '2013-10-25','2013-12-05'); SELECT * FROM #temp; SELECT CASE n.number WHEN 0 THENd.from_date ELSE DATEADD(MONTH, n.number,DATEADD(DAY, 1 - DAY(from_date), from_date)) END [start_date], CASE n.number WHEN DATEDIFF(MONTH, d.from_date, d.to_date) THENto_date ELSE DATEADD(DAY, -1,DATEADD(MONTH, 1,DATEADD(MONTH, n.number, DATEADD(DAY, 1 - DAY(from_date),from_date)))) END [end_date] FROMmaster.dbo.spt_values n INNER JOIN #temp AS d ON d.to_date >= DATEADD(MONTH, n.number - 1,d.from_date) WHERE type = 'p'
原始数据集:
拆分结果集: