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

本文介绍了一种在SQLServer中查询连续时间段的方法,利用master..spt_values表或自建整数表来生成指定时间范围内的每分钟、每小时或每天的数据点,适用于历史数据查询时需要展示空数据的情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在用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

查询结果如下:
这里写图片描述

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


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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值