sql server递归日期

本文介绍如何使用SQL生成指定日期范围内的每日日期序列,以及如何生成从1到100的数字序列。提供了两种生成数字序列的方法,并详细展示了通过递归公用表表达式(CTE)来实现日期序列的具体SQL语句。

在做项目任务时,需要将一个日期范围转换为日期表。 
例如:日期范围(2017年01月21日~2017年02月20日)、转换成一日为单位的日期表,如下。 
2017-01-21 
2017-01-22 
2017-01-23 
…… 
2017-02-19 
2017-02-20

直接上SQL,查询结果如上:

SET LANGUAGE N'Simplified Chinese'
DECLARE @StartDate      NVARCHAR(MAX) = '2017-01-21'
       ,@EndDate        NVARCHAR(MAX) = '2017-02-21'
;
WITH TEMP
AS
(SELECT CAST(@StartDate AS DATE) AS DT
 UNION ALL
 SELECT CAST(DATEADD(DAY,1,DT) AS DATE) FROM TEMP WHERE DATEADD(DAY,1,DT)<=@EndDate
)
SELECT * FROM TEMP
;
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

另外,生成数字序列1到100的方法,如下:

with t
as
(select 1 as dt
 union all
 select dt+1 from t
 where dt+1<=100
)
select dt from t option(maxrecursion 0)
;
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

更简单的方法,如下:

select number from master..spt_values where type='p' and number between 1 and 100
该函数最大值number<=2015

转载于:https://www.cnblogs.com/gered/p/8575456.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值