1、工作中遇到“在数据库中取一段连续的值”的需求,在sqlserver里可以借助 master..spt_values表(master.dbo.spt_values表)取数据序列(select number from master.dbo.spt_values),取值范围是0~2047。
2、Oracle数据库根据dual表和connect by语句,生成数字序列。
-- 生成 2901~3000 的数字
with tb as
(select rownum rn from dual connect by rownum<=3000 )
select * from tb where rn >2900
3、扩展使用1,sqlserver根据数字序列创建“两个日期之间的天”。
-- 创建 2019-01-01到2019-01-31之间的每天日期
SELECT convert(char(10), DATEADD(dd,number,'2019-01-01'),120) AS colName
FROM
master.dbo.spt_values
WHERE
type = 'p'
AND DATEDIFF(MI,DATEADD(dd,number,'2019-01-01'),'2019-01-31') >= 0
4、扩展使用2,统计每天(每年、月、日、时、分等)的数据库记录。
4.1 把数据表的统计字段的日期类型格式化为和日期序列一直的类型。
4.2 数据表 按格式化后的日期分组。
4.3 日期序列表和业务表关联,count函数记计数。