小编典典

SQL-将开始/结束时间分成15分钟的记录

sql

我有一个记录集,其中包含两个单独字段中的开始时间和结束时间:

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间隔。

我意识到可以使用存储过程中的逻辑来完成此操作,但是由于我们支持多个数据库引擎,因此我们试图保持数据库中立。


阅读 186

收藏
2021-05-16

共1个答案

小编典典

我同意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)
2021-05-16