SQL Server获取某个日期范围的日期/月份数据

很多时候做图形报表,需要得到某一个日期范围内的每日或每月的数据走势。SQL的写法通常都要先把这个日期范围内的每日或每月的列表造出来。

怎么造?要用到系统的MASTER..spt_values表,这个表有很多妙用,目前我只熟悉他的number字段。

select number from master..spt_values where type = 'p'

获取的是从0到2047,共2048个数字。.

然后我们利用日期的DATEDIFF函数、DATEADD函数,以及CONVERT函数就能形成我们想要的列。举例:

获取2020年1月1号到今天的每月的数据列:

select CONVERT(varchar(7),DATEADD(MONTH,number,'2020-1-1'), 23) as MonthNo
from master..spt_values
where type='p' AND number <= DATEDIFF(MONTH,'2020-1-1',getdate())

获取2020年1月1号到今天的每日的数据列:

select CONVERT(varchar(100),DATEADD(day,number,'2020-1-1'), 23) as MonthNo
from master..spt_values
where type='p' AND number <= DATEDIFF(day,'2020-1-1',getdate())