简明现代魔法 -> 数据库技术 -> 生成日期列表的存储过程

生成日期列表的存储过程

2010-08-04

写一个存储过程,输入为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

下面是实现这个功能的一个存储过程:

declare @startDate datetime;
declare @endDate datetime;
declare @numDays int;

set @startDate = '2010-01-01';
set @endDate = '2010-02-01';
set @numDays = datediff(day, @startDate, @endDate) + 1;

With NumDays as
(
	select top(@numDays)
		row_number() over(order by (select 0)) as n
	from
		sys.objects o1,
		sys.objects o2
)
select
	convert(varchar(10), dateadd(day, NumDays.n - 1, @startDate), 120) as date
from
	NumDays;

其中对两个sys.objects进行笛卡尔积连接,是为了生成足够多的行,可以换做sys.columns等大表。如果要生成的日期跨度非常大,可以考虑对3个表进行笛卡尔积。

其中还需要注意的是必须为这些表取别名,我这里用了o1和o2,否则会报错。

随机文章推荐
网站分类


注:如需转载本文,请注明出处(原文链接),谢谢。更多精彩内容,请进入简明现代魔法首页。

进入新博客
喜欢本文,就分享它吧
给我留言
您的名字:
您的邮件:
您的网站:


 

copyright © 2009 简明现代魔法    学习、分享、进步

power by Gonn 感谢所有关心和支持本站的朋友们