【原创】SqlServer、利用递归查询、将日期范围转换为日期表

来源:互联网 发布:js基础类型 编辑:程序博客网 时间:2024/06/13 23:22

在做项目任务时,需要将一个日期范围转换为日期表。
例如:日期范围(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 TEMPAS(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到100的方法,如下:

with tas(select 1 as dt union all select dt+1 from t where dt+1<=100)select dt from t option(maxrecursion 0);

更简单的方法,如下:

select number from master..spt_values where type='p' and number between 1 and 100
0 0