想法如下:先查询出此时间内所有按天日期数据,然后关联业务表查询出业务数据,没有的0代替。
利用日期的相加方法dateadd相加连续的数字得到每日日期数据。
如果日期段相差小于2048天,可以利用系统库master中的spt_values表,此表中存储着0到2047的连续数据。如果相差大于2048天就要自己造数据了,先说小于2048的:
declare @date1 DATETIME = '2020-06-01' declare @date2 DATETIME ='2020-06-10' select CONVERT(VARCHAR(100),dateadd(day,number,@date1),23) as dt from master.dbo.spt_values where type ='P' and number <=DATEDIFF(day, @date1, @date2)

如果可能大于2048天的话,使用临时表造出具体相差间隔天数的连续数据临时使用:
declare @date1 DATETIME = '1988-06-01' declare @date2 DATETIME ='2020-06-10' DECLARE @init INT SET @init=0 DECLARE @allDay INT CREATE TABLE #N( ID INT ) DECLARE cur CURSOR FOR SELECT DATEDIFF(day, @date1, @date2) OPEN cur FETCH NEXT FROM cur INTO @allDay WHILE @init<=@allDay BEGIN PRINT @init INSERT INTO #N (ID) VALUES ( @init ) SET @init = @init+1 FETCH NEXT FROM cur INTO @allDay END CLOSE cur DEALLOCATE cur --SELECT * FROM #N SELECT CONVERT(VARCHAR(10),DATEADD(DAY,ID,@date1),23) FROM #N WHERE ID<=DATEDIFF(DAY,@date1,@date2) DROP TABLE #N使用游标循环间隔数字生成连续数字表。这样无论间隔多少天都ok。


转载请说明出处:博客微站原文链接: