对于我正在使用的当前项目,我需要根据日期范围返回汇总报告。T/SQL中的日期范围
我有3种类型的报告,每年,每月和每日。
为了帮助返回这份报告,我需要一个函数来返回大范围内的所有日期时间的子范围。
因此,例如,如果我作为'2006-01-01 11:10:00'和'2006-01-05 08:00:00'之间的所有日常范围,我会期待以下结果。
select *
from dbo.fnGetDateRanges('d', '2006-01-01 11:10:00', '2006-01-05 08:00:00')
2006-01-01 11:10:00.000, 2006-01-02 00:00:00.000
2006-01-02 00:00:00.000, 2006-01-03 00:00:00.000
2006-01-03 00:00:00.000, 2006-01-04 00:00:00.000
2006-01-04 00:00:00.000, 2006-01-05 00:00:00.000
2006-01-05 00:00:00.000, 2006-01-05 08:00:00.000
对于'2006-01-01 11:10:00'到'2009-05-05 08:00:00'的年度范围,我会期待。
select *
from dbo.fnGetDateRanges('y', '2006-01-01 11:10:00', '2009-05-05 08:00:00')
2006-01-01 11:10:00.000, 2007-01-01 00:00:00.000
2007-01-01 00:00:00.000, 2008-01-01 00:00:00.000
2008-01-01 00:00:00.000, 2009-01-01 00:00:00.000
2009-01-01 00:00:00.000, 2009-05-05 08:00:00.000
我该如何实现这个功能?
这可以工作,但是我发现它比mssql的表函数解决方案少一点优雅。如果我真的需要一些适用于很多不同dbs的东西,那么基于集合的选项可能是唯一的选择。 – 2008-10-13 06:12:59