http://www.nowamagic.net/database/db_ProcedualToGennerateDateList.php
写一个存储过程,输入为startDate和endDate,输出为一个日期列表。eg:如果startDate='2010-01-01',endDate='2010-02-01',则输出为:
date |
2010-01-01 |
2010-01-02 |
2010-01-03 |
… |
2010-01-29 |
2010-01-30 |
2010-01-31 |
2010-02-01 |
下面是实现这个功能的一个存储过程:
01 | declare @startDate datetime; |
02 | declare @endDate datetime; |
05 | set @startDate = '2010-01-01' ; |
06 | set @endDate = '2010-02-01' ; |
07 | set @numDays = datediff( day , @startDate, @endDate) + 1; |
12 | row_number() over( order by ( select 0)) as n |
18 | convert ( varchar (10), dateadd( day , NumDays.n - 1, @startDate), 120) as date |
其中对两个sys.objects进行笛卡尔积连接,是为了生成足够多的行,可以换做sys.columns等大表。如果要生成的日期跨度非常大,可以考虑对3个表进行笛卡尔积。
其中还需要注意的是必须为这些表取别名,我这里用了o1和o2,否则会报错。