SQL Server获取时间段内的每一天每一时每一分

在用SQL Server做历史数据查询时,经常会需要获取某一段时间内每一分或每一时或每一天的连续数据,如果某个时间的数据为空,则查询的结果会不包含该时间的数据,然后有时又需要查询连续时间,为空的时间显示空,此时就需要查询出一个连续时间作为基础表进行表连接。
SQL Server数据空提供了一个master..spt_values的系统表,记录了一些系统给定的数值,此处可用该表进行查询。
例如:查询2017-01-01 00:00与2017-01-01 23:59之间的每一分钟,可使用如下代码:
select DATEADD(MI,number,'2017-01-01 00:00') as d from master..spt_values where type='p' and DATEDIFF(MI,DATEADD(MI,number,'2017-01-01 00:00'),'2017-01-01 23:59')>0

查询结果如下:
SQL Server获取时间段内的每一天每一时每一分_第1张图片

如果要获取每一小时只需要把查询语句中的MI换成HH,查询每一天则换成DD,以此类推,只需要换成时间对应的代码即可。


扩展:
上述方法由于master..spt_values表只提供了2048个连续整数(即0-2047),因此该方法最多只能获取到2048条数据,如果查询的范围查过了该数据量则不能全部显示。
此时可以自己新建一个只有一个字段的表,往里面随便插入n条连续的整数,用来代替master..spt_values表,即可完成上述查询

你可能感兴趣的:(SQL-Server)