1

我在 db Time Parameter(00:15) 、 StartTime(09:00) 、 EndTime (15:00) 中有 3 列

现在我想在 09:00 和 15:00 之间以 00:15 分钟的间隔显示所有时间

我应该编写什么查询,以便它返回如下值:

09:00 - 09:15
09:15 - 09:30
09:30 - 09:45
-
-
-
-
14:45 - 15:00
4

2 回答 2

6

使用 CTE 并假设hour part of @time is zero

declare @time time(0) = '00:15', 
        @start time(0) = '12:00', 
        @end time(0) = '15:00'

;with cte as (
    select @start sTime, dateadd(minute, datepart(minute,@time), @start) eTime
    union all
    select eTime, dateadd(minute, datepart(minute,@time), eTime)
    from cte
    where dateadd(minute, datepart(minute,@time), eTime) <= @end
)
select left(sTime,5) + ' - ' + left(eTime, 5) results 
from cte

--results
12:00 - 12:15
12:15 - 12:30
12:30 - 12:45
12:45 - 13:00
13:00 - 13:15
13:15 - 13:30
13:30 - 13:45
13:45 - 14:00
14:00 - 14:15
14:15 - 14:30
14:30 - 14:45
14:45 - 15:00
于 2013-05-20T15:26:02.627 回答
1

使用公用表表达式 (CTE) 生成一个包含您想要的所有时间的表。

Declare @strtDt smallDatetime = '15 May 2013 09:00';
Declare @endDt smallDateTime = '15 May 2013 15:00';
With DateTimes(dt) As
    (Select @strtDt
      Union All
     Select DateAdd(minute, 15, dt)
     From DateTimes
     Where dt < @endDt) 
Select dt from DateTimes 
option (maxrecursion 10000)  
于 2013-05-20T15:23:03.790 回答