很多时候做图形报表,需要得到某一个日期范围内的每日或每月的数据走势。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())