我有一个记录集,其中包含两个单独字段中的开始时间和结束时间:
id - Int startTime - DateTime endTime - DateTime
我想找到一种方法来查询记录,并根据在开始时间和结束时间之间发现的15分钟间隔将其作为X记录返回。
例如,假设我有一条这样的记录:
id, StartTime, EndTime 1, 1/1/2010 8:28 AM, 1/1/2010 8:47 AM
我将返回3条记录,第一个代表8:15间隔,#2代表8:30间隔,然后第三个代表8:45间隔。
我意识到可以使用存储过程中的逻辑来完成此操作,但是由于我们支持多个数据库引擎,因此我们试图保持数据库中立。
我同意Keith的说法,最好在应用程序中完成此操作。服务器和交叉连接到查找表对于大型源表而言将变得昂贵,但是出于娱乐目的,我整理了一个快速示例。
declare @QuarterHours table ( QuarterHour time ) declare @x time set @x = '00:00' insert into @QuarterHours (QuarterHour) values (@x) set @x = DATEADD(minute, 15, @x) while @x <> '00:00' begin insert into @QuarterHours (QuarterHour) values (@x) set @x = DATEADD(minute, 15, @x) end /* while */ declare @test table ( id int, starttime datetime, endtime datetime ) insert into @test (id, starttime, endtime) values (1, '2010-01-01 08:28', '2010-01-01 08:47') select t.id, q.QuarterHour from @test t cross join @QuarterHours q where q.QuarterHour between cast(t.starttime as time) and cast(t.endtime as time)